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 [题目] 输入一个矩阵,按照从外 ...
随机推荐
- ACM-可乐兑换
题目描述:可乐兑换 小明的班级参加一个活动,每人要喝过一瓶可乐,恰逢可乐促销,3瓶可乐空瓶可以换一瓶可乐,小明想节约钱,所以想买尽可能少的可乐让每人至少喝过一瓶可乐,问买至少多少瓶可乐够n人至少每人喝 ...
- MFC 实现CTreeCtrl单选
void CDepartmenManager::SetUncheck(HTREEITEM hTree) { if (!hTree){ return; } m_DePartmentView.SetChe ...
- k8s CI/CD--Jenkinsfile例子
试用k8s内部jenkins,并且配置好podtemplate pipeline{ agent any stages{ stage('get the code'){ steps{ ...
- Linux / MacOS 下Redis 安装、配置和连接
下载 下载redis压缩包 最新的为 5.0.4 地址 http://download.redis.io/releases/redis-5.0.4.tar.gz 安装 1 解压 切换工作目录到redi ...
- tortoiseGit 的简单使用说明
拉取仓库到本地 参考 下面几张图片,把仓库拉取到本地. 本地修改并推送 进入文件夹后,按照 下面几张图片切换到本地的开发分支 当修改完成之后,按照 下面几张图片 的方法把修改推送到远程仓库的开发分支. ...
- 吴裕雄--天生自然Django框架开发笔记:Django 创建第一个项目
Django 管理工具 安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 可以来看下django-admin ...
- C#高级编程(第9版) 第08章 委托、lambda表达式和事件 笔记
本章代码分为以下几个主要的示例文件: 1. 简单委托 2. 冒泡排序 3. lambda表达式 4. 事件示例 5. 弱事件 引用方法 委托是寻址方法的.NET版本.在C++中函数 ...
- 低JAVA版本,高兼容性启动
低JAVA版本,高兼容性启动 背景:部分操作系统java环境低版本,暂时无法更新最新版本,新系统需要使用较高版本Java环境 1.JAVA低版本不兼容当前应用 2.解压安装JAVA,无需配置环境变量 ...
- hadoop搭建一:虚拟机网络配置和基础(未完成)
基于VMware 15+CentOS 7+Hadoop 2.6,hadoop的搭建主要用于个人学习,水平有限. hadoop搭建一:虚拟机网络配置和基础 hadoop搭建二:hadoop全分布搭建 h ...
- SpringMVC_执行原理
什么是SpringMVC 概述 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架. 查看官方文档:https://docs.spring.io ...