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 [题目] 输入一个矩阵,按照从外 ...
随机推荐
- net GC 学习以及问题
引用对象必要空间开销:对象指针.同步块索引 GC重要点: 每个应用程序包含一组根,每个根都是一个存储位置,其中包含指向引用类型对象的一个指针,该指针要么指向托管堆中的要给对象,要么为null.(这句话 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-volume-down
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- element-ui实现自定义多个文件上传
这里强调下是:aixos是原始的,不要qs封装过的,不然不识别传值传不过去 <el-upload action="/admin/borrow/borrowEdit" list ...
- iOS 13适配
1. 安装时,加入Xcode11.3 后 原xcode会安装开发工具插件时候出现 点击安装插件之后会出现 目前没找到解决方案.只能在一个mac电脑上安装使用一个版本. 2.编译时,会出现libstdc ...
- c++程序—if语句实践
三只小 #include<iostream> using namespace std; #include<string> int main() { //which pig is ...
- POJ 2239:Selecting Courses 选课
Selecting Courses Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9380 Accepted: 4177 ...
- 修改虚拟机ip
在命令行里输入:more /etc/sysconfig/network-scripts/ifcfg-eth0 (注意more后要空一格,还有eth0,最后是数字零). 然后再输入:ifconfig ...
- .Net实现发送邮件功能
public ActionResult AddPost() { ResponseResult result = new ResponseResult(); ...
- Django2.0中的urlpattern匹配不输入任何网址时的写法
如果使用urlpattern匹配不输入任何网址时,应该如何写? 例如:仅匹配http://127.0.0.1:8000/时想要跳转到某个页面,这时urlpattern中的url规则应该写成: 情况1: ...
- C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记
本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件 引用方法 委托是寻址方法的.NET版本.在C++中函数 ...