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 [题目] 输入一个矩阵,按照从外 ...
随机推荐
- 用cmd运行java可以javac不行(win10)
今天发现个有趣的问题,用cmd运行java可以javac不行.(win10) java-home和classpath配置没有问题,最后发现问提出先在path,在这里看并没有异常. 在上面图片中点击编辑 ...
- junit基础学习之-测试service层(3)
测试步骤: 在之前的文章中已经加了junit的环境,这就不需要了. 1.加载junit类,spring配置文件,指明junit测试器,@Runwith 2.定义变量,service,不可以使用spri ...
- c++ opencv 数学函数示例
// ConsoleApplication11.cpp : Defines the entry point for the console application. // #include " ...
- prometheus配置简介
参考网页:https://my.oschina.net/wangyunlong/blog/3060776 global: scrape_interval: 15s evalua ...
- cmake的find_package()简单总结
遇到的问题 find_package(lzb)出现错误如下: CMake Warning at CMakeLists.txt:37 (find_package): By not providing & ...
- json解析精度问题
由于后台传过来的值是float或者double类型,解析之后作为对象放到字典或数组里面,被转成nsstring或者nsnumber会有一定的误差,很正常 解决办法,通过NSNumberFormatte ...
- java 微信红包算法代码实现及架构设计
转载至:https://www.zybuluo.com/yulin718/note/93148 微信红包的架构设计简介 架构 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈 ...
- Ubuntu下caffe:用自己的图片训练并测试AlexNet模型
参考博客:https://blog.csdn.net/eereere/article/details/79118645#commentBox 目录 1.准备图片 2. 将 图片路径写入txt 参考 这 ...
- XML--XML Schema Definition(四)
参考 http://www.w3school.com.cn/schema/index.asp XSD 复合类型指示器 通过指示器,我们可以控制在文档中使用元素的方式.有七种指示器: Order 指示器 ...
- maven项目集成Quartz定时任务框架,实现批处理功能
一.Quartz简介 主要做定时任务,即:在指定时间点或时间段,执行某项任务,可设置执行次数.时间间隔等. 二.Springcloud简介 对比传统的.庞大的.复杂的.以ssm或ssh为框架的web项 ...