汇总区间
    双指针方案
    [1]左指针永远指向区间的左边
    [2]右指针用于遍历整个数组
    [3]注意整个边界条件的处理(边界或者不连续)
    [4]注意 i 的移动

    1. var summaryRanges = function (nums) {
    2. let res = [];
    3. let i = 0;
    4. //从0开始
    5. for (let j = 0; j < nums.length; j++) {
    6. //边界或者不连续的时候
    7. if (j + 1 === nums.length || nums[j] + 1 !== nums[j + 1]) {
    8. if (i === j) {
    9. res.push(nums[i] + '');
    10. } else if (i < j) {
    11. res.push(nums[i] + '->' + nums[j]);
    12. }
    13. //注意切换i
    14. i = j + 1;
    15. }
    16. }
    17. return res;
    18. }
    19. const nums = [0, 1, 2, 4, 5, 7];
    20. console.log(summaryRanges(nums));

    自我版本实现

    var summaryRanges = function (nums) {
        let res = [];
        //特殊情况
        if (nums.length === 0) return res;
        if (nums.length === 1) {
            res.push(String(nums[0]));
            return res;
        }
        let [left, right] = [nums[0], null];
        for (let i = 1; i < nums.length; i++) {
            if (nums[i] === nums[i - 1] + 1) {
                right = nums[i];
            } else {
                if (right) {
                    let str = left + '->' + right;
                    res.push(str);
                } else {
                    res.push(left + '');
                }
                [left, right] = [nums[i], null];
            }
        }
        res.push(left + (right !== null ? '->' + right : ''));
        return res;
    };