zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【LeetCode】Missing Ranges

LeetCode missing
2023-09-11 14:20:27 时间

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);
}