首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 228:Summary Ranges — 有序數組區間合併

     編輯:關於C++

題目

給定無重複升序整數數組,返回區間摘要字符串列表。連續區間用 "a->b",單獨數字用 "a"。

範例

輸入: [0,1,2,4,5,7]
輸出: ["0->2","4->5","7"]

雙指針掃描法

  • start 記錄區間起始索引。
  • end 向後擴展,直到 nums[end+1] != nums[end] + 1。
  • 輸出區間,start = end + 1 繼續。

Java 代碼

public class Solution {
    public List summaryRanges(int[] nums) {
        List res = new ArrayList<>();
        if (nums == null || nums.length == 0) return res;
        int s = 0, e = 0;
        while (e < nums.length) {
            if (e + 1 < nums.length && nums[e+1] == nums[e] + 1) {
                e++;
            } else {
                String str = (s == e) ? String.valueOf(nums[s])
                                      : nums[s] + "->" + nums[e];
                res.add(str);
                e++;
                s = e;
            }
        }
        return res;
    }
}

C++ 版

class Solution {
public:
    vector summaryRanges(vector& nums) {
        vector res;
        int n = nums.size();
        for (int i = 0; i < n; ) {
            int j = i;
            while (j + 1 < n && nums[j+1] == nums[j] + 1) ++j;
            res.push_back(i == j ? to_string(nums[i])
                                 : to_string(nums[i]) + "->" + to_string(nums[j]));
            i = j + 1;
        }
        return res;
    }
};

複雜度

  • 時間:O(n),單次遍歷。
  • 空間:O(1)(不計輸出)。

關鍵點

  1. 數組已排序且無重複,保證區間連續性判斷簡單。
  2. 雙指針/單指針+內層 while 皆可,邏輯清晰。
  3. 字符串拼接注意 to_string / String.valueOf。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved