Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges.

example:

Input: nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99,
Output: ["2", "4->49", "51->74", "76->99"]

这题应该是实现的细节处理,最大整数,最小整数比较难,也是调了很久的corner case才调出来的。

好不容易Accept了,自己写的还是有点惨。

还要注意

if(lower++ == something) something;

不管判断对不对,lower都会自增的,要当心。

AC第一版

 #include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}; vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
vector<string> ret;
vector<int> processed;
for(int i=; i<nums.size(); i++){
if(processed.empty() || processed.back() != nums[i]){
processed.push_back(nums[i]);
}
}
nums.clear();
//for(auto i : processed) nums.push_back(i); for(auto i : processed) cout << i << " ";
cout << endl;
nums = processed;
if(lower == upper) {
if(!nums.empty()) return ret;
else ret.push_back(to_string(lower));
return ret;
}
if(nums.empty()){
ret.push_back(to_string(lower) + "->" + to_string(upper));
return ret;
}
for(int i=; i<nums.size(); i++){
//cout << lower << "and" << nums[i] << endl;
if (lower == nums[i]) {
lower++;
continue;
} if(lower+ == nums[i]) ret.push_back(to_string(lower));
else ret.push_back(to_string(lower) + "->" + to_string(nums[i]-));
if(nums[i] == ( << )-) return ret;
lower = nums[i]+;
}
//cout << lower << upper << endl;
if(lower > upper) return ret;
if(lower == upper) ret.push_back(to_string(lower));
else ret.push_back(to_string(lower) + "->" + to_string(upper));
return ret;
}

AC 第二版

简化了一些代码

vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
vector<string> ret;
vector<int> processed;
// filter duplicate
for(auto val : nums) {
if(processed.empty() || processed.back() != val) processed.push_back(val);
}
nums.clear();
nums = processed;
// for(auto i : processed) cout << i << " ";
// cout << endl;
// corner case 1: lower == upper
if(lower == upper) {
if(nums.empty()) ret.push_back(to_string(lower));
return ret;
}
for(int i=; i<nums.size(); i++){
if (lower != nums[i]) {
if(lower+ == nums[i]) ret.push_back(to_string(lower));
else ret.push_back(to_string(lower) + "->" + to_string(nums[i]-));
}
if(nums[i] == ( << )-) return ret;
lower = nums[i]+;
}
//cout << lower << upper << endl;
if(lower == upper) ret.push_back(to_string(lower));
else if(lower < upper) ret.push_back(to_string(lower) + "->" + to_string(upper));
return ret;
}

LC 163. Missing Ranges 【lock, hard】的更多相关文章

  1. LC 660. Remove 9 【lock, hard】

    Start from integer 1, remove any integer that contains 9 such as 9, 19, 29... So now, you will have ...

  2. LC 656. Coin Path 【lock, Hard】

    Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...

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

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

  4. ✡ leetcode 163. Missing Ranges 找出缺失范围 --------- java

    Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], ...

  5. 163. Missing Ranges

    题目: Given a sorted integer array where the range of elements are [lower, upper] inclusive, return it ...

  6. [LeetCode#163] Missing Ranges

    Problem: Given a sorted integer array where the range of elements are [lower, upper] inclusive, retu ...

  7. LeetCode 163. Missing Ranges (缺失的区间)$

    Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], ...

  8. [leetcode]163. Missing Ranges缺失范围

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

  9. [LeetCode] 163. Missing Ranges 缺失区间

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

随机推荐

  1. 常见排序&查询算法Java代码实现

    1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需 ...

  2. java_day03_流程控制

    ch03 目标:表达式和流程控制 ---------------------------------------------- 1.实例变量和局部变量 程序的基本功能是处理数据,程序中需要使用变量来接 ...

  3. [ZOJ 3076] Break Standard Weight

    题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5009 题意:给你两个数字,可以把其中一个拆成两个数字,计算这三个数字 ...

  4. [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime]

    [易学易懂系列|rustlang语言|零基础|快速入门|(5)] Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = ...

  5. Spring——AOP

    AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...

  6. JS 循环的两种方式

    // 1.for循环 for (var i = 0; i <= 10; ++ i) { console.log(i); } // 2.while循环 var i = 0; while (i &l ...

  7. 第二天Beta冲刺

    这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 <做个一亿的小项目> 这个作业的目标 完成第二天Beta冲刺 作业正文 .. ...

  8. TCP协议(包括TCP的连接过程,数据分段,TCP有关服务器优化)

    Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议 TCP/IP是一个Protocol Stack(协议栈),包括TCP.IP ...

  9. Newnode's NOI(P?)模拟赛 第二题 dp决策单调优化

    其实直接暴力O(n3)DP+O2O(n^3)DP+O_2O(n3)DP+O2​优化能过- CODE O(n3)O(n^3)O(n3) 先来个O(n3)O(n^3)O(n3)暴力DP(开了O2O_2O2 ...

  10. Python之hashlib模块的使用

    hashlib模块主要的作用: 加密保护消息安全,常用的加密算法如MD5,SHA1等. 1.查看可用的算法有哪些 #!/usr/bin/env python # -*- coding: utf-8 - ...