暴力解法:遍历数组,判断数组是否连续递增。将连续递增的数据的首尾的数据分别存储在map集合的key和value之中,输出时判断首尾值是否相同采用两种方式输出
复杂度分析
- 时间复杂度:O(n),其中 n 为数组的长度。
- 空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。
import java.util.HashMap;
public class SummaryIntervals {
public static HashMap<Integer, Integer> summaryIntervals(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();//用map集合存储首尾数据,如果相同,则只输出一个点
if (nums.length == 0) {//防止输入空数组
return map;
}
int a = nums[0];
int b = nums[0];
for (int i = 0; i < nums.length; i++) {
if (i < nums.length - 1 && nums[i] + 1 != nums[i + 1]) {//i < nums.length - 1避免数组越界
b = nums[i];//赋值b
map.put(a, b);//存储首尾数据
a = nums[i + 1];//更新a,b
b = nums[i + 1];
} else if (i == nums.length - 1) {//处理结尾的数据
if (a != nums[i]) {
b = nums[i];
}
map.put(a, b);
}
}
return map;
}
public static void main(String[] args) {
int[] nums1 = new int[]{0, 1, 2, 4, 5, 7};
int[] nums2 = new int[]{0, 2, 3, 4, 6, 8, 9};
int[] nums3 = new int[0];
int[] nums4 = new int[]{-1};
HashMap<Integer, Integer> map = summaryIntervals(nums3);
for (HashMap.Entry<Integer, Integer> entry : map.entrySet()) {
// 处理每个键值对
if (entry.getKey() == entry.getValue()) {//判断map集合的key和value值是否相同
System.out.print(entry.getKey() + " ");
} else {//不相同
System.out.print(entry.getKey() + "-->" + entry.getValue() + " ");
}
}
}
}