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

LeetCode Summary Ranges 有序數組區間合併

     編輯:關於C++

問題

給定無重複遞增整數數組,將連續區間合併為 "start->end" 格式,單獨數字輸出 "num"。例:[0,1,2,4,5,7] → ["0->2","4->5","7"]。

優雅解法:雙指針掃描

維護區間起點 start,掃描至連續性斷裂處,輸出區間,更新起點。

代碼實現

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

關鍵點

  • C++11 to_string 簡化數字轉字符串
  • 外層循環 i = j 直接跳過已處理區間
  • 內層 while 擴展連續區間
  • 時間 O(N),空間 O(1) 不計輸出

避坑指南

  • 空數組直接返回空向量
  • 單元素區間不加箭頭
  • 使用 long long 防溢出(題目數據 int 足夠)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved