1. 程式人生 > >Leetcode 228:彙總區間(最詳細的解法!!!)

Leetcode 228:彙總區間(最詳細的解法!!!)

給定一個無重複元素的有序整數陣列,返回陣列區間範圍的彙總。

示例 1:

輸入: [0,1,2,4,5,7]
輸出: ["0->2","4->5","7"]
解釋: 0,1,2 可組成一個連續的區間; 4,5 可組成一個連續的區間。

示例 2:

輸入: [0,2,3,4,6,8,9]
輸出: ["0","2->4","6","8->9"]
解釋: 2,3,4 可組成一個連續的區間; 8,9 可組成一個連續的區間。

解題思路

這個題目非常簡單,我們直接按照題目意思來即可。我們首先定義四個指標

  0   1   2   4   5   7
start
 end
 pre
     cur

startend最後指向的是一個連續區間的開始和結束,precur表示之前指向的元素和當前指向的元素。我們開始遍歷nums,判斷nums[cur]-nums[pre]==1,如果成立cur++;pre++。否則的話

  0   1   2   4   5   7
start
         end
         pre
             cur

end=pre,此時如果start!=end的話,我們就將nums[start]->nums[end]新增到最後的結果中去。接著令start=cur;pre++;cur++,開始一輪新的查詢。

  0   1   2   4   5   7
            start
         end
             pre
                 cur

最後程式碼如下

class Solution:
    def summaryRanges(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        nums_len = len(nums)
        if nums_len == 0:
            return []
        result = list()
        start, end, pre, cur = 0, 0, 0, 1
        while cur <=
nums_len: if cur < nums_len and nums[cur] - nums[pre] == 1: cur += 1 pre += 1 else: end = pre if end != start: result.append(str(nums[start])+"->"+str(nums[end])) else: result.append(str(nums[start])) start = cur cur += 1 pre += 1 return result

我將該問題的其他語言版本新增到了我的GitHub Leetcode

如有問題,希望大家指出!!!