Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7] Output: ["0->2","4->5","7"] Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.Example 2:
Input: [0,2,3,4,6,8,9] Output: ["0","2->4","6","8->9"] Explanation: 2,3,4 form a continuous range; 8,9 form a continuous range.
汇总区间。
给定一个无重复元素的有序整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
"a->b" ,如果 a != b
"a" ,如果 a == b来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
影子题163。这个题不涉及什么算法或者思路,但是注意到如果是形成一个range的数字,会满足nums[i] + 1 == nums[i + 1],如果不满足这个条件,就要开始结算range了。如果跳出while循环的时候,一开始的num == 现在的nums[i]那说明这个数字是单独存在的。
时间O(n)
空间O(1)
Java实现
1 class Solution { 2 public List<String> summaryRanges(int[] nums) { 3 List<String> res = new ArrayList<>(); 4 if (nums == null || nums.length == 0) { 5 return res; 6 } 7 for (int i = 0; i < nums.length; i++) { 8 // range start 9 int num = nums[i]; 10 while (i < nums.length - 1 && nums[i] + 1 == nums[i + 1]) { 11 i++; 12 } 13 // 跳出while循环的时候,nums[i]应该是range的end 14 if (num != nums[i]) { 15 res.add(num + "->" + nums[i]); 16 } else { 17 res.add(num + ""); 18 } 19 } 20 return res; 21 } 22 }
相关题目