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的更多相关文章

  1. 【LeetCode】163. Missing Range

    Difficulty: Medium  More:[目录]LeetCode Java实现 Description Given a sorted integer array where the rang ...

  2. 【LeetCode】163. Missing Ranges 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...

  3. LeetCode题目解答

    LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...

  4. C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告

    剑指offer 重建二叉树 提交网址: http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tq ...

  5. Java的修饰符

    转自:http://blog.csdn.net/manyizilin/article/details/51926230#L42 修饰符: 像其他语言一样,Java可以使用修饰符来修饰类中方法和属性.主 ...

  6. php 生成word的三种方式

    原文地址 http://www.jb51.net/article/97253.htm 最近工作遇到关于生成word的问题 现在总结一下生成word的三种方法. btw:好像只要是标题带PHP的貌似点击 ...

  7. 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 ...

  8. C# 调用webservice 几种办法(转载)

    原文地址: http://www.cnblogs.com/eagle1986/archive/2012/09/03/2669699.html //=========================== ...

  9. 51. 顺时针打印矩阵[print matrix in clockwise direction]

    [本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...

随机推荐

  1. 136-PHP 使用类名访问static修饰的类方法

    <?php class test{ //定义一个类 public static function class_info(){ //定义类方法 return '这是一个用于测试的类.'; } } ...

  2. 【机器学习实战笔记(3-2)】朴素贝叶斯法及应用的python实现

    文章目录 1.朴素贝叶斯法的Python实现 1.1 准备数据:从文本中构建词向量 1.2 训练算法:从词向量计算概率 1.3 测试算法:根据现实情况修改分类器 1.4 准备数据:文档词袋模型 2.示 ...

  3. Vuex基本介绍

    1.什么是Vuex Vuex是一个专为vue.js应用程序开发的状态管理模式. 状态管理:data里面的变量都是vue的状态. 2.为什么要用Vuex 当我们构建一个中大型的单页面应用程序时,Vuex ...

  4. python --- excel文件处理

    1.安装第三方库:openpyxl 2.操作示例 from openpyxl import load_workbook #.打开文件 file = load_workbook("test.x ...

  5. realme发布会将于本周三在北京·幻艺术举行

    5月13日消息,realme宣布将于5月15日(本周三)在北京·幻艺术中心发布realme X. 根据官方公布的海报,realme X采用了升降全面屏方案,无挖孔.无刘海.无水滴,支持屏幕指纹识别,正 ...

  6. CGridCtrl 添加button (CGridCellButton类)

    #ifndef __GRID_CELL_BUTTON__ #define __GRID_CELL_BUTTON__ #include "../GridCtrl_src/GridCell.h& ...

  7. Linux系统中的变量PATH

    PATH 作用 在Linux安装一些可执行文件通常要添加路径环境变量PATH,PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接 ...

  8. Java8 Optional类使用小结

    Optional类的Javadoc描述如下: 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. of:  为非null的值创建一 ...

  9. centos7+nginx+php+mysql环境搭建

    一:CentOS7安装 在VMware 新建一个虚拟机CentOS 64位,配置好磁盘大小为30G,内存2G,启动虚拟机进入CentOS安装界面 选择Install CentOS 7 SOFTWARE ...

  10. SQL left join、rignt join、inner join区别

    说真的一直对数据库没有研究以至于连这些基础都不会了,事实证明,业精于勤荒于嬉. 废话不多说,直接开始 有A.B两张表: 1.inner join inner join 和 join 是没有区别的(如有 ...