LeetCode Smallest Range

数据范围是3500,3500也就是说n的平方是可以接受的。这里告诉你就是有序的,也就是在提醒你可能会是一个类似于二分的算法,所以的话其实基于这两个认识的话我们就可以利用一个枚举叫二分的算法来解决这道题。怎么做呢?就首先的话我们要枚举一端,一端的话我们可以把所有的这个lists的里面所有元素都给去重然后对它进行左端的一个枚举,然后右端的话的呢我们就分别对每一个list进行一个二分来查找它可能包含所有至少来查找这个至少包含一个元素的最大的这么一个区间是什么。然后我们每次枚举的时候把这些最大的区间找一个最小的出来,这就是我们所需要的一个答案。那么这个整个复杂度的话应该是k的平方乘以一个log所有lists里面最大的一个,所有lists里面一个最长的元素n,所以应该是k^2*logn,这个复杂度是可以接受的。

首先呢是要对这个我们要对就要枚举的这个元素进行去重,这样我们就可以减少这个运算量。这里呢我用一种可能大家不怎么熟悉的一种去重的方法,就是用一个sort+unqiue这个方法来进行去重。然后unique的话呢是用于一个有序的数组的一个去重的方法。然后unique它返回的这个东西的下标,就最后一个元素的下标。然后注意的话这个unique的话,也就是对有序的、就是已经排好序的这么一个数组才能进行去重,不然的话它就有可能返回一个错误的结果。

 

这样我们就得到了它在已经去重之后的这个vi的区间是在哪儿,所以的话我们就可以来进行枚举了。枚举的话呢我们就直接就遍历到offset就行。offset是去重之后的vi的区间。注意一下这个unique去重之后是一个左闭右开的一个区间,就是STL的一个惯例。然后的话我们这个区间我们还得定义一下这个区间的话可能那个最大值就是是多少,我们最大值肯定是排完序之后的,左边的话它肯定是它的那个最小值,所以我们这边就直接用这个排好序之后的一个最小值以及排好序之后的最大值,就这里减1,因为是左闭右开。然后这里应该是枚举的话我们先把这个区间锁定在一个秩上面,最后我们来进行一个扩展,然后之后再跟大L、跟大R进行比较。然后我们有时候的话我们可能枚举的话可能是找不到一个合适的值,比如说我们如果是拿26去枚举的话,我们就肯定就,20、26作为它的那个左边那个值的话是肯定得不到一个正确的值的。比如说26到哪儿都,到30的话肯定是覆盖不了所有的区间的,所以的话那我们要定义一个布尔变量来判断一下我们是否是不是能找到这个值,所以的话我们就开始遍历所有的vector,然后的话,我们这里要用lower_bound,就是说找到第一个出现、第一次出现的地方,这样的话才是我们所需要的那个最小的区间。因为的话我们每次枚举的话肯定都是要找一个最大符合的,我们不是找最小符合的,就最小符合的话可能就其它区间就不会满足了,这样的话我们才有机会覆盖所有的,就我们以l这个值为枚举的话,我们才有可能找到这个r,l到r的话可以覆盖所有的这个区间。

 

class Solution {
public:vector<int> smallestRange(vector<vector<int>>& nums) {//sort+unique [1,1,1,2,3,3]->[1,2,3,XXXXXX]//vector<int> vi,rt;vector<int> vi;for (auto& i:nums) {for (auto j:i) {vi.push_back(j);        }}sort(vi.begin(), vi.end());//vector<int>::iterator offset= unique(vi.begin(),vi.end());int L = *vi.begin();//int R = *vi.end()-1;int R = *(vi.end() - 1);int offset = unique(vi.begin(), vi.end()) - vi.begin();for (int i = 0;i < offset;i++) {int l = vi[i];int r = vi[i];bool find = false;for (auto& j : nums) {auto iter = lower_bound(j.begin(),j.end(),l);if (iter != j.end()) {find = true;r = max(*iter,r);}else {find = false;break;}}if (find) {if ((r -l<R-L)||(l<L&&r-l==R-L)) {L = l;R = r;}}}//rt.push_back(vi[L]);//rt.push_back(vi[R]);//return rt;return { L,R };}
};

 

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10781087.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle创建用户、表空间、导入导出、...命令

//创建临时表空间create temporary tablespace test_temp tempfile E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf size 32m autoextend on next 32m maxsize 2048mextent management local;//创建数据表空间create tablespace test_dataloggingdatafile E:\or…

[html] 简述下html5的离线储存原理,同时说明如何使用?

[html] 简述下html5的离线储存原理&#xff0c;同时说明如何使用&#xff1f; 原理&#xff1a;HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术)&#xff0c;通过这个文件上的解析清单离线存储资源&#xff0c;这些资源就会像cookie一样被存储了下来。…

DCX读书报告Bring structure to the web有感

DCX今天做的学术报告直接采用MSRA荣研究员的“Bring Structure to the web”的PPT&#xff0c;读的效果很不错&#xff0c;看样子是下功夫了&#xff0c;他理解了80%以上 当然学术报告与读书报告&#xff1a; 1、从形式上而言&#xff0c;都应该采用中文&#xff0c;源图须重画…

Web前端3.0时代,“程序猿”如何“渡劫升仙”

Web前端入行门槛低&#xff0c;很多人在成为前端工程师后很容易进入工作的舒适区&#xff0c;认为该熟悉的业务已熟悉了&#xff0c;然后就是重复用轮子&#xff0c;这样很容易让自己的成长处于原地打转以及低水平重复的状态。 想要不被行业抛弃&#xff0c;就要努力提升自己。…

[html] viewport常见设置都有哪些?

[html] viewport常见设置都有哪些&#xff1f; width: widthdevice-widthinitial-scalemaximum-scaleuser-scalable个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题…

mysql用 fifo 记录日志_MySQL一丢丢知识点的了解

1. MySQL体系结构从概念上讲&#xff0c;数据库是文件的集合&#xff0c;是依照某种数据模型组织起来并存放于二级存储器中的数据集合&#xff1b;数据库实例是程序&#xff0c;是位于用户与操作系统之间的一层数据管理软件&#xff0c;用户对数据库数据的任何操作&#xff0c;…

HttpHandler

概述HttpHandler是一个HTTP请求的真正处理中心&#xff0c;也正是在这个HttpHandler容器中&#xff0c;ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行&#xff0c;并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。 IHttpHandler是什么 I…

[html] 为什么HTML5只需要写<!DOCTYPE HTML>就可以?

[html] 为什么HTML5只需要写就可以&#xff1f; 因为 HTML5 与 HTML4 基于的基准不同。HTML4 基于 SGML 因此需要除了 DOCTYPE 外还需要引入 DTD 来告诉浏览器用什么标准进行渲染。DTD 还分为标准模式、严格模式。如果什么都不写&#xff0c;就完全让浏览器自我发挥&#xff0…

小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...

转载来源&#xff1a;编程小石头我们在做小程序支付相关的开发时&#xff0c;总会遇到这些难题。小程序调用微信支付时&#xff0c;必须要有自己的服务器&#xff0c;有自己的备案域名&#xff0c;有自己的后台开发。这就导致我们做小程序支付时的成本很大。本节就来教大家如何…

python接口自动化(二十五)--unittest断言——下(详解)

简介 本篇还是回归到我们最初始的话题&#xff0c;想必大家都忘记了&#xff0c;没关系看这里&#xff1a;传送门 没错最初的话题就是登录&#xff0c;由于博客园的登录机制改变了&#xff0c;本篇以我找到的开源免费的登录API为案例&#xff0c;结合 unittest 框架写 2 个用例…

使用C#和Excel进行报表开发(五)-操作单元格边框和颜色 【转】

在用Excel作报表的时候&#xff0c;可能需要操作单元格的边框和填充颜色和纹理等操作&#xff0c;下面的代码说明如何设置选中的单元格的填充纹理和边框try{ThisApplication new Excel.Application();ThisWorkbook ThisApplication.Workbooks.Open("z:\\Book1.xls"…

输入 3 个正数,判断能否构成一个三角形。

package com.my.demo;import java.util.Scanner;public class Triangle {public static void main(String[] args) {System.out.println("请输入三个正整数&#xff1a;");Scanner sc1new Scanner(System.in);int asc1.nextInt();int bsc1.nextInt();int csc1.nextIn…

mysql-bin磁盘满数据库重启不_liunx磁盘空间满了,导致mysql数据库无法启动

如何启动/遏制/重启MySQLA、1、启动圆式1、哄骗 service 启动&#xff1a;service mysqld start2、哄骗 mysqld 脚本启动&#xff1a;/etc/inint.d/mysqld start3、哄骗 safe_mysqld 启动&#xff1a;safe_mysqld&二、遏制1、哄骗 service 启动&#xff1a;service mysqld …

[html] title与h1的区别、b与strong的区别、i与em的区别?

[html] title与h1的区别、b与strong的区别、i与em的区别&#xff1f; title 是 网页标题标签 h1 是文本标签 默认与word的h1相似为最大的标题显示 b 为文本加粗标签 与word的加粗功能相似 strong 为强调语气&#xff0c; 也是为文本加粗 与b标签是有不同 i 标签为斜体 常用于阿…

两个日期的 月差

datediff(DateInterval.Month,date1,date2) 转载于:https://www.cnblogs.com/lhuser/articles/1288289.html

[html] HTML5的文件离线储存怎么使用,工作原理是什么?

[html] HTML5的文件离线储存怎么使用&#xff0c;工作原理是什么&#xff1f; localstorge 利用浏览器的本地存储可以缓存信息 &#xff0c;在创建数据的时候引入创建好的数据 cookie 好像也可以个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&…

springboot忽略证书_SpringBoot获取resource下证书失败

1.第一种失败的情况&#xff1a;本来使用Spring的上下文容器获取文件&#xff0c;将证书文件放在resource下&#xff0c;编译后获取文件会出现报错java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DerInputStream.getLength():…

看一个国家的国民教育&#xff0c;要看他的公共厕所。 看一个男人的品味&#xff0c;要看他的袜子。 看一个女人是否养尊处优&#xff0c;要看她的手。 看一个人的气血&#xff0c;要看他的头发。 看一个人的心术&#xff0c;要看他的眼神。 看一个人的身价&#xff0c;要…

死锁产生的原因及条件和手写死锁

什么是死锁&#xff1f; 由于两个或者多个线程互相持有对方所需要的资源&#xff0c;导致线程处于等待状态&#xff0c;造成死锁。 为什么会产生死锁&#xff08;为什么会互相占用对方的资源&#xff09; 因为系统资源不足。 进程运行推进的顺序不合适。 资源分配不当等。产生死…

[html] iframe框架都有哪些优缺点?

[html] iframe框架都有哪些优缺点&#xff1f; 优点重载页面时不需要重载整个页面&#xff0c;只需要重载页面中的一个框架页技术易于掌握&#xff0c;使用方便&#xff0c;可主要应用于不需搜索引擎来搜索的页面方便制作导航栏缺点会产生很多页面&#xff0c;不容易管理*不容…