Swift - LeetCode - 匯總區(qū)間

題目

給定一個 無重復(fù)元素有序 整數(shù)數(shù)組 nums。

返回 恰好覆蓋數(shù)組中所有數(shù)字最小有序 區(qū)間范圍列表。也就是說,nums 的每個元素都恰好被某個區(qū)間范圍所覆蓋,并且不存在屬于某個范圍但不屬于 nums 的數(shù)字 x。

列表中的每個區(qū)間范圍 [a,b] 應(yīng)該按如下格式輸出:

  • "a->b",如果 a != b
  • "a",如果 a == b

示例 1:

  • 輸入:nums = [0,1,2,4,5,7]
  • 輸出:["0->2","4->5","7"]
  • 解釋:區(qū)間范圍是:
    [0,2] --> "0->2"
    [4,5] --> "4->5"
    [7,7] --> "7"

示例 2:

  • 輸入:nums = [0,2,3,4,6,8,9]
  • 輸出:["0","2->4","6","8->9"]
  • 解釋:區(qū)間范圍是:
    [0,0] --> "0"
    [2,4] --> "2->4"
    [6,6] --> "6"
    [8,9] --> "8->9"

方法一:一次遍歷

思路及解法

我們從數(shù)組的位置 0 出發(fā),向右遍歷。每次遇到相鄰元素之間的差值大于 11 時,我們就找到了一個區(qū)間。遍歷完數(shù)組之后,就能得到一系列的區(qū)間的列表。

在遍歷過程中,維護(hù)下標(biāo) lowhigh 分別記錄區(qū)間的起點和終點,對于任何區(qū)間都有 low≤high。當(dāng)?shù)玫揭粋€區(qū)間時,根據(jù) lowhigh 的值生成區(qū)間的字符串表示。

  • 當(dāng) low<high 時,區(qū)間的字符串表示為 ‘‘low→high";

  • 當(dāng) low=high 時,區(qū)間的字符串表示為 ‘‘low"。

代碼

class Solution {
    func summaryRanges(_ nums: [Int]) -> [String] {
        var ret: [String] = []
        var i = 0
        while i < nums.count {
            let low = i
            i += 1
            while i < nums.count && nums[i] == (nums[i - 1] + 1) {
                i += 1
            }
            let high = i - 1
            var tem: String = String(nums[low])
            if high > low {
                tem += "->"
                tem += String(nums[high])
            }
            ret.append(tem)
        }
        return ret
    }
}

復(fù)雜度分析

  • 時間復(fù)雜度:時間復(fù)雜度:O(n),其中 n 為數(shù)組的長度。

  • 空間復(fù)雜度:空間復(fù)雜度:O(1)。除了用于輸出的空間外,額外使用的空間為常數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容