LeetCode No.163,164,165
No.163 FindMissingRanges 缺失的区间
题目
- 给定一个排序的整数数组 nums ,其中元素的范围在闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。
示例
- 输入: nums = [0, 1, 3, 50, 75],lower = 0 和 upper = 99。
- 输出: ["2", "4->49", "51->74", "76->99"]
思路
- 要注意到nums里的每个元素必然是在[lower,upper]间的,一开始一直考虑没有仔细看题以为还会存在区间外的情况。
- 比对每个值,如果与当前最左边界lower一致,则不需要做任何处理。
- 如果不一致,说明存在缺失区间,判断当前nums[i]与lower之间是不是只差1,差1就直接插入一个值,超过1则返回lower->nums[i]-1的形式。
- lower以nums[i]+1作为下一次的最左边界。
- 注意最后lower与最右边界upper是否重合,不是则需要补上。
代码
/**
* @param {number[]} nums
* @param {number} lower
* @param {number} upper
* @returns {string[]}
*/
var findMissingRanges = function (nums, lower, upper) {
let result = [];
for (let i = 0, lens = nums.length; i < lens; i++) {
if (nums[i] === lower) {
lower++;
continue;
}
if (nums[i] - 1 === lower) {
result.push(lower + '');
}
else {
result.push(lower + '->' + (nums[i] - 1));
}
lower = nums[i] + 1;
}
if (lower < upper) {
result.push(lower + '->' + upper);
}
else if (lower === upper) {
result.push(upper + '');
}
return result;
}
console.log(findMissingRanges([0], 0, 1));
console.log(findMissingRanges([0, 1], 0, 1));
console.log(findMissingRanges([0, 1, 3, 50, 75], 0, 99));
console.log(findMissingRanges([0, 1, 3, 50, 75, 99], 0, 99));
console.log(findMissingRanges([0, 2, 4, 5, 8, 9, 75, 99], 0, 99));
console.log(findMissingRanges([0, 2, 4, 5, 8, 9, 75, 98], 0, 99));
console.log(findMissingRanges([0, 2, 4, 5, 8, 9, 75, 98, 99], 0, 99));
No.164 MaximumGap 最大间距
题目
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
如果数组元素个数小于 2,则返回 0。
示例
- 输入: [3,6,9,1]
- 输出: 3
- 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
- 输入: [10]
- 输出: 0
- 解释: 数组元素个数小于 2,因此返回 0。
说明
- 你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
- 请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。
思路
- 最简单的解法肯定是先排序,然后再算相邻的俩数差值,最后得出一个最大差值,我们快排的时间复杂度为O(nlogn),再遍历一次数组要O(n)时间,那么常用解至少需要O(nlogn)时间复杂度。
- 题目要求我们在O(n)的时间内解决。
代码
No.165 CompareVersion 比较版本号
题目
- 比较两个版本号 version1 和 version2。如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
- 你可以假设版本字符串非空,并且只包含数字和 . 字符。
- . 字符不代表小数点,而是用于分隔数字序列。
- 例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
- 你可以假设版本号的每一级的默认修订版号为 0。
- 例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。
示例
- 输入: version1 = "0.1", version2 = "1.1"
- 输出: -1
- 输入: version1 = "1.0.1", version2 = "1"
- 输出: 1
- 输入: version1 = "7.5.2.4", version2 = "7.5.3"
- 输出: -1
- 输入:version1 = "1.01", version2 = "1.001"
- 输出:0
- 解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
- 输入:version1 = "1.0", version2 = "1.0.0"
- 输出:0
- 解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。
提示
- 版本字符串由以点 (.) 分隔的数字字符串组成。这个数字字符串可能有前导零。
- 版本字符串不以点开始或结束,并且其中不会有两个连续的点。
思路
代码
LeetCode No.163,164,165的更多相关文章
- 【LeetCode】163. Missing Range
Difficulty: Medium More:[目录]LeetCode Java实现 Description Given a sorted integer array where the rang ...
- 【LeetCode】163. Missing Ranges 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- LeetCode题目解答
LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...
- C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
剑指offer 重建二叉树 提交网址: http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tq ...
- Java的修饰符
转自:http://blog.csdn.net/manyizilin/article/details/51926230#L42 修饰符: 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性.主 ...
- php 生成word的三种方式
原文地址 http://www.jb51.net/article/97253.htm 最近工作遇到关于生成word的问题 现在总结一下生成word的三种方法. btw:好像只要是标题带PHP的貌似点击 ...
- C# DBHelper 第二版
1. [代码][C#]代码 跳至 [1] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- C# 调用webservice 几种办法(转载)
原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //=========================== ...
- 51. 顺时针打印矩阵[print matrix in clockwise direction]
[本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...
随机推荐
- php观察者模式。
第一次写博客,大家多多关照!欢迎拍砖哦! 我也刚学设计模式,所以记录下来. <?php class person{ public $name; public $birthday; public ...
- spring教程
Spring框架是Java EE开发中最流行的框架,已经成为JEE事实上的标准,全世界的开发人员都在使用Spring框架开发各种应用.随着Spring boot,Spring cloud新版本的不断推 ...
- 【转载】RobotFramework的Setup或Teardowm中执行多个关键字
有时候需要在setup和teardowm中执行多个关键字 以前的做法就是重新封装一个keyword,然后调用,It’s OK 这里介绍另外一个方法,使用Run Keywords来实现 用法其实非常的简 ...
- 如何在Ubuntu 18.04上安装和卸载TeamViewer
卸载命令:sudo apt --purge remove teamviewer 安装:https://www.linuxidc.com/Linux/2018-05/152282.htm 如何在Ubun ...
- 数据结构顺序表中Sqlist *L,&L,Sqlist *&L
//定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...
- python--多线程的应用
python 多线程执行函数,以及调用函数时传参 import threading def func1(): print('this is function1') def func2(x,y): pr ...
- select、poll和epoll机制
一.参考网址 1.select函数及fd_set介绍 2.linux select 函数和 fd_set 用法 2.select.poll和epoll的区别 3.利用select实现IO多路复用TCP ...
- linux提交代码到github
1.首先你得注册个github账户 .... 2.新建项目(可以选择私有或者公开的) 3.上述github代码仓库建立好了 ,就回到自己的linux服务器 3.1 在自己的项目目录里 qi 3.1. ...
- Sqlserver 增删改查----增
注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...
- request和response的setCharacterEncoding()方法
1.pageEncoding=”UTF-8”的作用是设置JSP编译成Servlet时使用的编码.2.contentType=”text/html;charset=UTF-8”的作用是指定服务器响应给浏 ...