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. navicat连接阿里云mysql

    1.服务器控制台在安全组配置3306端口 2.进入 /etc/ssh/sshd_config 在最下面 加入下面代码 KexAlgorithms diffie-hellman-group1-sha1, ...

  2. Web开发的分层结构与MVC模式

    1.分层结构 所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下: 实体类: 封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生 ...

  3. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  4. 不能使用 float 和 double 来表示金额等精确的值

    不能使用 float 和 double 来表示金额等精确的值 关于面试,金额用什么数据类型? 不是 doube,更不是 float ,而是用 BigDecimal.对于金融项目,对于金额,误差是不能容 ...

  5. 【模板】多标记 LCT

    代码如下 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int mod = 51061 ...

  6. Hadoop-No.15之Flume基于事件的数据收集和处理

    Flume是一种分布式的可靠开源系统,用于流数据的高效收集,聚集和移动.Flume通常用于移动日志数据.但是也能移动大量事件数据.如社交媒体订阅,消息队列事件或者网络流量数据. Flume架构 Flu ...

  7. 【Python网络】子网划分

    ip地址的结构和分类 根据 TCP/IP 协议,连接在internet上的每个设备都必须有一个ip地址 他是一个32位二进制数,也可以用点分十进制表示,每八位一组,用一个十进制表示即0-255,每组用 ...

  8. Bootloader - Main system - Recovery的三角关系

    原文地址:http://blog.csdn.net/myarrow/article/details/8115610 一.MTD分区:BOOT:        boot.img,Linux kernel ...

  9. Linux安装—IP设置

    IP设置 务必不要把Linux的IP设置为和我们的真实机位于同一网段(这可能会跟其他机器造成冲突) 具体操作是:在安装虚拟机时Network Type设置选择:Use Host-Only networ ...

  10. 两列布局实现各自独立滚屏,类似与 scrollNav 的功能。

    现在移动端 web 开发越来越靠近 app 的功能.所以两列布局各自都能实现独立滚动也常见.基于固定侧边栏导航,另一侧实现内容展示. 这个功能的核心在于使用 vh 单位. 其中 CSS 的代码是核心点 ...