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,一经查实,立即删除!

相关文章

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

Web前端入行门槛低&#xff0c;很多人在成为前端工程师后很容易进入工作的舒适区&#xff0c;认为该熟悉的业务已熟悉了&#xff0c;然后就是重复用轮子&#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…

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

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

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

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

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 …

[导入]C# Tips 2 右键单击listBox时弹出右键菜单并选中单击的行

C#,Listbox,右键,菜单,选中文章来源:http://blog.csdn.net/geyunfei_hit/archive/2008/07/16/2661153.aspx 转载于:https://www.cnblogs.com/geyunfei/archive/2008/10/08/1306335.html

python真的可以减少工作强度_用Python写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!...

前几天有一个读者说最近要整理几千份文件&#xff0c;头都要整秃了&#xff0c;不知道能不能用Python解决&#xff0c;我们来看一下&#xff0c;你也可以思考一下。由于涉及文件私密所以具体内容已做脱敏处理。大概是这样&#xff0c;一个文件夹下有多份会议通知信息(本文以 7 …

Jmeter之逻辑控制器(Logic Controller)

一、简单控制器&#xff08;Simple Controller&#xff09;&#xff1a; 作用&#xff1a;这是Jmeter里最简单的一个控制器&#xff0c;它可以让我们组织我们的采样器和其它的逻辑控制器&#xff08;分组功能&#xff09;&#xff0c;提供一个块的结构和控制&#xff0c;并不具…

python需要掌握的词汇量_北大保安英语词汇量1.5万,会用Python编程,孟母三迁真有道理...

这就是良好学习环境的重要性啊&#xff0c;不然你以为“孟母三迁”是咋来的&#xff1f;人家孟母为了孩子有个好的学习环境&#xff0c;宁愿搬三次家。而这些保安小哥一步到位&#xff0c;直接就进入了无数人梦寐以求的最高学府&#xff0c;想不牛都不行啊。01、北大是最高学府…

Visual Studio Team System 2008 安装失败

微软的东西 看样子也没怎么测试就发布了。。。 [10/27/08,23:05:56] Microsoft .NET Framework 3.5: [2] Error code 1603 for this component means "安装时发生严重错误"[10/27/08,23:05:58] Microsoft .NET Framework 3.5: [2] Setup Failed on component Microso…

【题解】序列

题目描述 一个长度为k的整数序列b1&#xff0c;b2&#xff0c;...&#xff0c;bk&#xff08;1≤b1≤b2≤...≤bk≤N&#xff09;称为“好序列”当且仅当后一个数是前一个数的倍数&#xff0c;即bi1是bi的倍数对任意的i&#xff08;1≤i≤k-1&#xff09;成立。 给定N和k&#…

Struts2 文件上传

JSP界面&#xff1a; 必须把表单的enctype属性改为 multipart/form-data才能上传 Action&#xff1a; 程序如果多人使用&#xff0c;必须保证文件名是唯一&#xff0c;文件名相同会覆盖掉原来的文件&#xff0c;所以使用时间作为文件名。可以把生成的文件名直接存入数据库中&am…

看新闻的时间用的太多了

也不知从什么时候开始习惯每天看新闻,好像有五六年的习惯了,只是现在每天看新闻的时间用的太多了(每天都至少5-6小时),而且越来越严重了,除了看新闻,基本只剩下工作和睡觉时间了.cctv2,央视新闻频道,第一财经每天必看,新浪,搜狐,凤凰网,时寒冰,牛刀等等,从时事,到经济,到体育,到…

第五章学习小结

第5章学习树和二叉树 树 1.树的结构定义是一个递归定义&#xff1a;树的定义中又用到树的定义 2.结点的度即为结点的分支数&#xff0c;树的度是树内各结点度的最大值&#xff0c;二叉树每个结点至多只有两颗子树&#xff08;即二叉树中不存在度大于2的结点&#xff09; 二叉树…

[html] 浏览器内多个标签页之间的通信方式有哪些?

[html] 浏览器内多个标签页之间的通信方式有哪些&#xff1f; 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

java 优酷视频缩略图_java获取优酷等视频缩略图

类型&#xff1a;Android平台大小&#xff1a;6.8M语言&#xff1a;中文 评分&#xff1a;7.2标签&#xff1a;立即下载想获取优酷等视频缩略图&#xff0c;在网上没有找到满意的资料&#xff0c;参考了huangdijia的PHP版工具一些思路&#xff0c;写了下面的JAVA版代码。。其实…

java篇 之 变量存放位置

一&#xff1a;在方法中声明的变量&#xff0c;即该变量是局部变量&#xff0c;每当程序调用方法时&#xff0c;系统都会为该方法建立一个方法栈&#xff0c;其所在方法中声明的变量就放在方法栈中&#xff0c;当方法结束系统会释放方法栈&#xff0c;其对应在该方法中声明的变…

import json java_JAVA的JSON数据包装-博客园老牛大讲

标签&#xff1a;一、什么是json呢&#xff1f;{"id":"1","username":"老牛大讲堂","password":"123"}这就是json数据。用来和页面(HTMl)进行通信的。二、通信为什么用json呢&#xff1f;没有为啥&#xff0c;因为…

砂.随笔.二十.微笑

左脑和右脑在争吵 左手和右手在撕扯 左脚和右脚走向两端 撕扯着神经 我想要疯狂地尖叫 但熟悉的人和面孔在对着我微笑 那么弯起嘴角吧 那么眯起眼角吧 那么就这样吧 就只能是这样了 我的尖叫和痛哭掩盖在微笑的面具下慢慢窒息 这样或许是最好的 谁都不知道你们曾经到来过 那么就…