Given a sorted integer array nums, where the range of elements are in the inclusive range [lowerupper], 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. redis编译和安装出现错误

    redis编译到时候出现错误,记录一下原因 1.下载redis,https://redis.io/download ,一般选择稳定版本,稳定版的版本号是偶数,当前最新版本是5.0.4,Linux可直接 ...

  2. 启动Activity的单独事件方法2

    1.Button中创建android:onClick="sendmessage" sendmessage方法名 //MAIN_acitivity创建这个同名独立方法 响应Butto ...

  3. shell脚本基础和grep文本处理工具企业应用3

    文本处理工具:    linux上文本处理三剑客        grep,egrep,fgrep:文本过滤工具(模式:pattern)工具            grep:默认支持的是基本正则表达式: ...

  4. 调用libusb_control_transfer 出错,返回-8

    写入 0x81读出 0x01 对USB输出端点进行初始化,包括端点地址.传输类型和最大包长度 注意一下,USB初始化时,也有读/写之分. 写入: cyusb_bulk_transfer(writeha ...

  5. 关于一款c++贪吃蛇小游戏

    好久不资瓷了. 首先声明,这个东西为转载(窝不会写这个.) 原作者:洛谷dalaoWZK20080124. 代码如下: #include <iostream> #include <W ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  7. ogg中断处理

    ogg因为网络问题导致中断无法启动,需要重新抽取数据: --前滚抽取进程生成新的trail文件 alter extract ext147 etrollover alter ext147 extseqn ...

  8. (转)rotatelogs - Piped logging program to rotate Apache logs

    原文:http://publib.boulder.ibm.com/httpserv/manual60/programs/rotatelogs.html rotatelogs is a simple p ...

  9. Eclipse 的 CheckStyle 插件

    Eclipse 的 CheckStyle 插件 1.简介 Checkstyle 是 SourceForge 下的一个开源项目,提供了一个帮助 JAVA 开发人员遵守某些编码规范的工具.它能进行自动化代 ...

  10. NOI2013 二叉查找树

    题目链接:戳我 对于一个排序二叉树来讲,它的中序遍历对应的序列是可以确定的. 我们知道如果求一个访问频率最低的(也就是没有修改),直接就区间DP即可.\(dp[i][j]=min(dp[i][j],d ...