# 228. Summary Ranges

Given a sorted integer array without duplicates, return the summary of its ranges.

Example 1:

Input:  [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.

Example 2:

Input:  [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: 2,3,4 form a continuous range; 8,9 form a continuous range.

# Solution

Approach 1: Scan the array.

# Code (Python)

Approach 1:

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        ranges = []
        for num in nums:
            if not ranges or num > ranges[-1][1] + 1:
                ranges.append([num, num])
            else:
                ranges[-1][1] = num
        return [str(interval[0]) + '->' + str(interval[1]) if interval[0] != interval[1] else str(interval[0]) for interval in ranges]

# Code (C++)

Approach 1:

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> res;
        int head = 0;
        int tail = 0;
        while (tail <= nums.size())
        {
            if (tail > 0 && (tail == nums.size() || nums[tail] - 1 > nums[tail-1]))
            {
                ostringstream oss;
                oss << nums[head];
                if (tail - 1 > head)
                    oss << "->" << nums[tail-1];
                res.push_back(oss.str());
                head = tail;
            }
            tail++;
        }
        return res;
    }
};