228. Summary Ranges
2016-03-22 17:13
363 查看
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
思路:
1. 声明一个int型计数器count,判断nums中当前元素的值加上1是否等于下一个位置元素的值。如若相等,就执行cout++;然后迭代器移动到下一个位置,(这里就是一直把计数器增加,直到出现不相等的时候,进入下一种情况)再次判断第i个元素的值加上1是否等于下一个位置元素的值,如果不等,则利用计数器和当前的i值,format需要的summary
of ranges,别忘了计数器要置为0,从而进入下一轮的判断。
2. 刚开始我只在nums的元素末尾加上0(或者其他非0数字)作为一个标兵(注意代码中判断了nums[i]和nums[i+1]的值,如果直接操作nums中元素,会造成out_of_range异常,这是因为最后一个元素是i,那么i+1就超出nums的范围,造成异常;因此需要加一个0或者其他非零数字(当nums=[-1]时,需要加入其他非零数字,不然会错误),但我们并不操作加入的数字)。
注意:
1. 我设计算法的核心思想是:① 记录和下一个位置元素值-1不相等的元素的位置;②
加入两种标兵(0和非0数字)来辅助程序设计。
2. 复习string字符串的数值转换,参考:C++标准库,字符串
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.
Subscribe to see which companies asked this question
思路:
1. 声明一个int型计数器count,判断nums中当前元素的值加上1是否等于下一个位置元素的值。如若相等,就执行cout++;然后迭代器移动到下一个位置,(这里就是一直把计数器增加,直到出现不相等的时候,进入下一种情况)再次判断第i个元素的值加上1是否等于下一个位置元素的值,如果不等,则利用计数器和当前的i值,format需要的summary
of ranges,别忘了计数器要置为0,从而进入下一轮的判断。
2. 刚开始我只在nums的元素末尾加上0(或者其他非0数字)作为一个标兵(注意代码中判断了nums[i]和nums[i+1]的值,如果直接操作nums中元素,会造成out_of_range异常,这是因为最后一个元素是i,那么i+1就超出nums的范围,造成异常;因此需要加一个0或者其他非零数字(当nums=[-1]时,需要加入其他非零数字,不然会错误),但我们并不操作加入的数字)。
注意:
1. 我设计算法的核心思想是:① 记录和下一个位置元素值-1不相等的元素的位置;②
加入两种标兵(0和非0数字)来辅助程序设计。
2. 复习string字符串的数值转换,参考:C++标准库,字符串
vector<string> summaryRanges(vector<int>& nums) { int len = nums.size(); //nums.push_back(0); int count = 0; vector<string> temp; string str; /* ------ 运行报错后新加 ------- */ // 需加判断nums是否为空 if (len == 0) return temp; // 原来只在nums数组后面加入0;但是当输入的nums形参内只有-1时,会报错 auto it = nums.end() - 1; if (*it == -1) { nums.push_back(1); } else { nums.push_back(0); } for (int i = 0; i < len; ++i) { if ((nums[i] + 1) == nums[i + 1] ) { ++count; } else { /*if (count == 0 ) { temp.push_back("\"" + to_string(nums[i]) + "\"" ); } else { str = "\"" + to_string(nums[i - count]) + "->" + to_string(nums[i]) + "\""; temp.push_back(str); count = 0; }*/ // 换成简单的代码 // LeetCode上面不让加"\"" str = (count == 0) ? ("\"" + to_string(nums[i]) + "\"") : ("\"" + to_string(nums[i - count]) + "->" + to_string(nums[i]) + "\""); temp.push_back(str); count = 0; } } return temp; }
相关文章推荐
- QTableView中 允许编辑 item 编辑时候显示SpinBox
- WEB打印控件
- Microsoft Security Essential: 微软安全软件
- Notification通知
- FPGA静态时序分析——IO口时序(Input Delay /output Delay)(转载)
- java域名解析
- 同样劳动,为何结果不同?
- 4--项目整体管理和项目范围管理
- 谈谈对Spring IOC的理解
- 部署jar应用时cmd在换一个目录后就报找不到路径
- 含有GROUP BY子句的查询中如何显示COUNT()为0的结果
- Codeforces Round #337 (Div. 2) D. Vika and Segments
- 通过HTML5和WebGL来制作2D游戏
- 泛型 简谈
- 11、JQuery知识点总结
- 字符串中数字求和
- Linux下php安装Redis扩展
- zepto返回顶部动画
- 每天一个linux命令(60):scp命令
- Docker数据管理