【LeetCode】Missing Ranges

Missing Ranges

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

For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].

逐个数组元素遍历,将间隙取出即可。注意两边的情况。

class Solution {
public:
    vector<string> findMissingRanges(int A[], int n, int lower, int upper)
    {
        vector<string> ret;
        if(n == 0)
            return ret;
        string str;
        if(lower < A[0])
        {
            if(lower < A[0]-1)
                str = to_string((long long)lower) + "->" + to_string((long long)A[0]-1);
            else
                //lower == A[0]-1
                str = to_string((long long)lower);
            ret.push_back(str);
        }
        for(int i = 1; i < n; i ++)
        {
            if(A[i] - A[i-1] < 2)
                continue;

            if(A[i] - A[i-1] > 2)
                str = to_string((long long)A[i-1]+1) + "->" + to_string((long long)A[i]-1);
            else
                //A[i] - A[i-1] == 2
                str = to_string((long long)A[i-1]+1);
            ret.push_back(str);
        }
        if(A[n-1] < upper)
        {
            if(A[n-1] < upper-1)
                str = to_string((long long)A[n-1]+1) + "->" + to_string((long long)upper);
            else
                //upper == A[n-1]+1
                str = to_string((long long)upper);
            ret.push_back(str);
        }
        return ret;
    }
};

以下是我的测试用例,全部通过:

void display(vector<string>& ret)
{
    for(int i = 0; i < ret.size(); i ++)
    {
        cout << ret[i] << " ";
    }
    cout << endl;
}

int main()
{
    Solution s;
    int A[1];
    //expect: ["0->9"]
    vector<string> ret = s.findMissingRanges(A, 0, 0, 9);
    display(ret);

    int B[1] = {6};
    //expect: ["0->5", "7->9"]
    ret = s.findMissingRanges(B, 1, 0, 9);
    display(ret);

    int C[3] = {0, 1, 2};
    //expect: []
    ret = s.findMissingRanges(C, 3, 0, 2);
    display(ret);

    int D[5] = {0, 1, 3, 50, 75};
    //expect: ["2", "4->49", "51->74", "76->99"]
    ret = s.findMissingRanges(D, 5, 0, 99);
    display(ret);
}
时间: 2024-11-06 03:50:05

【LeetCode】Missing Ranges的相关文章

【LeetCode】Summary Ranges

问题描述 Given a sorted integer array without duplicates, return the summary of its ranges. For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"]. 意:找出排序数组(无重复数字)中的各个连续的范围 算法思想 基本思想如下,给定排序数组 N<a1,a2,a3,...,an>,

【LeetCode】数组

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [1]Two Sum [4]Median of Two Sorted Arrays [11]Container With Most Water [15]3Sum [16]3Sum Closest [18]4Sum [26]Remove Duplicates from Sorted Array [27]Remove Element [31]Next Permutatio

【leetcode】 First Missing Positive

[LeetCode]First Missing Positive Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 找到第一个没有出现的正整数 思路:

【leetcode】Generate Parentheses

题目: 给定整数n,返回n对匹配的小括号字符串数组. For example, given n = 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 分析: 这种问题的模式是:1)问题的解有多个 ,2)每个解都是由多个有效的 "步骤" 组成的,3)变更以有解的某个或某些"步骤"

【LeetCode】Implement strStr()

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 标准KMP算法.可参考下文. http://blog.csdn.net/yaochunnian/article/details/7059486 核心思想在于求出模式串前缀与后缀中重复部分,将重复信息保存在n

【LeetCode】Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 ->

【LeetCode】Pascal&#39;s Triangle

Pascal's Triangle Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 这题别想用通项公式做,n choose m里面的连乘必然溢出,老老实实逐层用定义做. class Solution { public: vector<vector<

【LeetCode】Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路:第一遍正常复制链表,同时用哈希表保存链表中原始节点和新节点的对应关系,第二遍遍历链表的时候,再复制随机域. 这是一种典型的空间换时间的做法,n个节点,需要大小为O(n

【leetcode】Max Points on a Line (python)

给定一个点,除该点之外的其他所有点中,与该点的关系要么是共线,要么就是共点,也就是两点重合. 共线有三种情况:水平共线,垂直共线,倾斜的共线.合并下这三种情况就是斜率存在的共线和斜率不存在的共线. 那么我们的任务就是针对每个点,找出与其共线的这些情况中,共线最多的点的个数. 注意:最终的结果别忘了加上共点的个数. class Solution: def maxPoints(self, points ): if len( points ) <= 1: return len( points ) ma