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"].
接口:public List<String> summaryRanges(int[] nums);
给定一个排序好的数组,无重复的元素,返回这个数组的范围。看示例容易理解。
顺序扫描一遍数组,用2个指针 start
和 end
来记录每一小段的范围,分割点是nums[end + 1] == nums[end] + 1)
,满足此条件,end
指针往后移动。
细节:处理好数组的最后一个元素:若到了最后一个元素,不进行判断nums[end + 1] == nums[end] + 1)
,直接进入范围的统计处理。新航道雅思
复杂度: Time O(N); Space: O(1)
3 代码public List<String> summaryRanges(int[] nums) { final int len = nums.length; List<String> result = new LinkedList<String>(); for (int start = 0, end = 0; end < len;) { if ((end + 1 < len) && (nums[end + 1] == nums[end] + 1)) { end++; } else { if (start == end) { result.add(Integer.toString(nums[start])); } else { result.add(nums[start] + "->" + nums[end]); } end++; start = end; } } return result; }4 总结
题目简单,思路清晰,注意代码的细节。
5 扩展如果数组中有重复的元素,又该如何做?
多添加一个判断:
nums[end + 1] == nums[end] + 1
或者nums[end + 1] == nums[end]
,满足条件,end
指针往后移动一位。