1、题目描述
给定一个无重复元素的有序整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
"a->b" ,如果 a != b
"a" ,如果 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、题目分析
- 将所有连续的元素按照要求的格式输出
- 需要判断连续的元素是否是单个的
- 需要两个变量记录左右边界
3、代码实现
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<>();
if(nums.length == 0) return res;
int left = 0,right = 1;
while(right < nums.length){
if(nums[right] == nums[right - 1] + 1){
right++;
}else{
StringBuilder sb = new StringBuilder();
if(right - left == 1){
sb.append(nums[left]);
}else{
sb.append(nums[left]);
sb.append("->");
sb.append(nums[right - 1]);
}
res.add(sb.toString());
left = right;
right++;
}
}
StringBuilder sb = new StringBuilder();
if(right - left == 1){
sb.append(nums[left]);
}else{
sb.append(nums[left]);
sb.append("->");
sb.append(nums[right - 1]);
}
res.add(sb.toString());
return res;
}
}
class Solution {
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<>();
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (j + 1 == nums.length || nums[j] + 1 != nums[j + 1]) {
StringBuilder sb = new StringBuilder();
sb.append(nums[i]);
if (i != j) {
sb.append("->").append(nums[j]);
}
res.add(sb.toString());
i = j + 1;
}
}
return res;
}
}
4、复杂度分析