LeetCode228:Summary Ranges
阿新 • • 發佈:2017-07-27
元素 with pty containe without i++ lee ++ back
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7], return [“0->2”,”4->5”,”7”].
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
最開始是這麽想的,能夠用一個隊列來存放連續的數字。這樣在遍歷數組的過程中將數依次放入隊列中。當某一個數和前一個數不同一時候將隊列中的數打印輸出(假設隊列中僅僅有1個元素。將這個元素打印輸出,假設隊列中有多個元素。那麽將隊列的頭和尾打印出來),然後將隊列清空。並將這個和前面元素不同的數放入隊列中。這樣遍歷到數組尾端時隊列中一定還會有元素,再將元素打印出來就能夠了。
runtime:0ms
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
int length=nums.size();
vector<string> result;
if(length<=0)
return result;
vector<int> bucket;
bucket.push_back(nums[0]);
for (int i=1;i<length;i++)
{
if(nums[i-1]==nums[i]-1)
{
bucket.push_back(nums[i]);
}
else
{
if(bucket.size()==1)
result.push_back(to_string(bucket[0]));
else
{
string str=to_string(bucket.front())+"->"+to_string(bucket.back());
result.push_back(str);
}
bucket.clear();
bucket.push_back(nums[i]);
}
}
if(!bucket.empty())
{
if(bucket.size()==1)
result.push_back(to_string(bucket[0]));
else
{
string str=to_string(bucket.front())+"->"+to_string(bucket.back());
result.push_back(str);
}
}
return result;
}
};
然後看了下Discuss,發現了一種更加優化的一種解法。沒有上面太多的分支推斷。就是從頭開始遍歷數組。一直找到第一個不連續的數。然後打印。接著再開始遍歷。這樣能夠避免上面邊界條件的處理。
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
int length=nums.size();
vector<string> result;
if(length==0)
return result;
if(length==1)
{
result.push_back(to_string(nums[0]));
return result;
}
for(int i=0;i<length;)
{
int start=i;
int end=i;
while(end+1<length&&nums[end]==nums[end+1]-1)
end++;
if(start<end)
{
string str=to_string(nums[start])+"->"+to_string(nums[end]);
result.push_back(str);
}
else
result.push_back(to_string(nums[start]));
i=end+1;
}
return result;
}
};
LeetCode228:Summary Ranges