LeetCode 228——彙總區間(滑動視窗)
阿新 • • 發佈:2021-01-27
技術標籤:LeetCode刷題
一、題目介紹
給定一個無重複元素的有序整數陣列 nums 。
返回 恰好覆蓋陣列中所有數字 的 最小有序 區間範圍列表。也就是說,nums 的每個元素都恰好被某個區間範圍所覆蓋,並且不存在屬於某個範圍但不屬於 nums 的數字 x 。
列表中的每個區間範圍 [a,b] 應該按如下格式輸出:
"a->b" ,如果 a != b
"a" ,如果 a == b
示例 1: 輸入:nums = [0,1,2,4,5,7] 輸出:["0->2","4->5","7"] 解釋:區間範圍是: [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"] 解釋:區間範圍是: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9" 示例 3: 輸入:nums = [] 輸出:[] 示例 4: 輸入:nums = [-1] 輸出:["-1"] 示例 5: 輸入:nums = [0] 輸出:["0"] 提示: 0 <= nums.length <= 20 -231 <= nums[i] <= 231 - 1 nums 中的所有值都 互不相同 nums 按升序排列
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/summary-ranges
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
二、解題思路
本題利用滑動視窗的方法,遍歷給定陣列的過程中,記錄視窗的下限low和上限high。如果low < high,字串記錄low->high;如果low==high,字串記錄low。詳見程式碼。
三、解題程式碼
class Solution { public: vector<string> summaryRanges(vector<int>& nums) { vector<string> vec; int len = nums.size(); if(len == 0) return vec; int i = 0; while(i < len) { int low = i; i++; while(i < len && nums[i-1] + 1 == nums[i]) { i++; } int high = i-1; string str = to_string(nums[low]); if(low < high) { str.append("->"); str.append(to_string(nums[high])); } vec.push_back(move(str)); } return vec; } };