问题描述:
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"].
算法:
1、如果数组为空,则返回空,如果数组只有一个值,则返回该值得字符串形式
2、如果前一个数加一等于后一个数,则向后移动直到不相等,或者已经移动到最后一个数,根据连续序列的长度来输出字符串的形式。
3、移动到最后一个数,如果最后一个数和前面的数构成序列,则输出,如果和前面的数不能构成序列 ,则单独将该数输出
时间复杂度:
O(n)
代码实现:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> range_result;
vector<int> squ_num;
int range_begin=0;
if(nums.empty())
return range_result;
if(nums.size()==1)
{ stringstream ss;
ss<<nums[0];
string sub_string;
ss>>sub_string;
range_result.push_back(sub_string);
}
range_begin=nums[0];
for(int i=1;i<nums.size();i++)
{
if(nums[i-1]+1!=nums[i] || i==nums.size()-1)
{
stringstream ss;
string sub_string;
int range_end=nums[i-1];
if(i==nums.size()-1&&nums[i-1]+1==nums[i]) range_end=nums[i];
if(range_begin!=range_end)
ss<<range_begin<<"->"<<range_end;
else
ss<<nums[i-1];
ss>>sub_string;
range_result.push_back(sub_string);
range_begin=nums[i];
if(i==nums.size()-1&&nums[i-1]+1!=nums[i])
{
ss.clear();
ss<<nums[i];
ss>>sub_string;
range_result.push_back(sub_string);
}
}
}
return range_result;
}