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

LeetCode 228 Summary Ranges:有序陣列區間合併

     編輯:關於C++

題目描述

給定**無重複、已排序**整數陣列,合併連續區間並格式化輸出。單個數輸出 "x",連續區間輸出 "a->b"。

範例

Input: [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]

單次遍歷解法

維護區間起點 start,遍歷陣列,當 nums[i+1] != nums[i] + 1 時區間結束,輸出並更新 start = i+1。

代碼實作

class Solution {
public:
    vector summaryRanges(vector& nums) {
        vector res;
        if (nums.empty()) return res;
        
        int start = 0;
        for (int i = 0; i < nums.size(); ++i) {
            // 區間結束條件:到達末尾 或 下一個不連續
            if (i + 1 == nums.size() || nums[i+1] != nums[i] + 1) {
                if (start == i)
                    res.push_back(to_string(nums[i]));
                else
                    res.push_back(to_string(nums[start]) + "->" + to_string(nums[i]));
                start = i + 1;
            }
        }
        return res;
    }
};

複雜度

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

關鍵細節

  • 使用 to_string (C++11) 簡化整數轉字串。
  • 邊界條件:空陣列、單元素、全連續、全不連續均自動處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved