全球看热讯:go语言题解LeetCode228汇总区间示例详解
目录
题目描述思路分析AC 代码题目描述
原题链接 :
228. 汇总区间
给定一个 无重复元素的有序整数数组 nums
。
(相关资料图)
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums
的数字 x
。
列表中的每个区间范围 [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"
提示:
nums 中的所有值都 互不相同nums 按升序排列0 <= nums.length <= 20
-2^31 <= nums[i] <= 2^31 - 1
思路分析
本题思路比较明晰,设立双指针,一前一后遍历数组,当遇到结果不是有序递增,即nums[j]+1 != nums[j+1]时,中断数组,从i,到j进行条件判断插入字符串,插入完之后,将i移动到j后面那个位置,即i = j + 1。
本题难点在于边界处理,因为涉及到j+1,遍历时只能遍历到n-1,最后一位需要依照相同的思路重新判断一遍,如果数组为空或者只有一个元素,循环语句也不好判断,因为无法与第二个元素相比较。有评论使用逃课方法,即在数组后额外安插一个整型最大值,但这样的方法如果数组原本最后一个元素是最大值-1时,会导致结果错误不能使用。
AC 代码
vectorsummaryRanges(vector &nums) { vector s; if (nums.size() == 0) return s; if (nums.size() == 1) { s.push_back(to_string(nums[0])); return s; } int i = 0, j = 0, n = nums.size(); string t; for (; j < n - 1; j++) { if (nums[j] + 1 != nums[j + 1]) { if (i == j) s.push_back(to_string(nums[i])); else s.push_back(to_string(nums[i]) + "->" + to_string(nums[j])); i = j + 1; } } if (i == j) s.push_back(to_string(nums[i])); else s.push_back(to_string(nums[i]) + "->" + to_string(nums[j])); return s; }
以上就是go语言题解LeetCode228汇总区间示例详解的详细内容,更多关于go语言汇总区间的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?