首页 > 其他 > 详细

LeetCode-228-汇总区间

时间:2019-11-11 23:14:55      阅读:82      评论:0      收藏:0      [点我收藏+]

LeetCode-228-汇总区间

题目

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 1:

输入: [0,1,2,4,5,7] 输出: ["0->2","4->5","7"] 解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。

示例 2:

输入: [0,2,3,4,6,8,9] 输出: ["0","2->4","6","8->9"] 解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

 

思路

首先判断数组中数字与前一个数字的差值,如果为1表示连续,不为1则不连续

记数组中第一位数字为头,开始遍历数组

判断当前数字是否连续,连续则继续往下,不连续则记录头和当前数字,并把头更新为当前数字

 

总结

题目本身不难,但是由于code方式不够严谨,提交的时候遇到了两个错误

  1. 输入为空或只有一个数字的时候,没有进行判断,造成运行或输出错误

  2. 当输入的两个数字相差超过Int表示范围的时候,会出现运行错误

第一个问题很好解决,加上判断条件就可以了

第二个问题可以把思路中求当前数字与前一个数字的差值改为:当前数字减1是否为上一个数字即可

最后结果:

执行用时 :0 ms, 在所有 cpp 提交中击败了100.00%的用户

内存消耗 :8.5 MB, 在所有 cpp 提交中击败了59.48%的用户,

开心:)

 

代码

#include <iostream>
#include <vector>
#include <cstring>
#include <sstream>
?
using namespace std;
?
class Solution{
public:
string convertToString(int numA, int numB){
stringstream sstream;
if (numA!=numB){
sstream<<numA<<"->"<<numB;
}else{
sstream<<numA;
}
return sstream.str();
}
?
vector<string> summaryRanges(vector<int>& nums){
vector<string> result;
if (nums.size()==0){
return result;
}else if(nums.size()==1){
result.push_back(convertToString(nums[0], nums[0]));
return result;
}
int head = nums[0];
for (int i=1; i<nums.size(); i++){
string info = "";
if (nums[i]-1!=nums[i-1]){
info = convertToString(head, nums[i-1]);
result.push_back(info);
head = nums[i];
}
if (i==nums.size()-1){
info = convertToString(head, nums[i]);
result.push_back(info);
}
}
return result;
}
?
};
?
?

 

LeetCode-228-汇总区间

原文:https://www.cnblogs.com/sakurapiggy/p/11838873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!