汇总区间(Java)
大家好我是苏麟 , 这篇文章也是凑数的 ...
描述 :
给定一个 无重复元素 的 有序 整数数组 nums
。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums
的数字 x
。
题目 :
LeetCode 228.汇总区间 :
228. 汇总区间
分析 :
这个题使用双指针也可以非常方便的处理,慢指针指向每个区间的起始位置,快指针从慢指针位置开始向后遍历直到不满足连续递增(或快指针达到数组边界),则当前区间结束;然后将 slow指向更新为 fast + 1,作为下一个区间的开始位置fast继续向后遍历找下一个区间的结束位置,如此循环,直到输入数组遍历完毕 .
解析 :
// LeetCode
class Solution {
public List<String> summaryRanges(int[] nums) {
ArrayList<String> al = new ArrayList<>();
int slow = 0;
for(int fast = 0;fast < nums.length ; fast++){
if(fast + 1 == nums.length || nums[fast] + 1 != nums[fast + 1]){
StringBuffer s = new StringBuffer();
s.append(nums[slow]);
if(slow != fast){
s.append("->").append(nums[fast]);
}
al.add(s.toString());
slow = fast + 1;
}
}
return al;
}
}
本篇文章会收到算法通关第三关白银挑战 .