lc228. 汇总区间

lc228. 汇总区间_第1张图片

暴力解法:遍历数组,判断数组是否连续递增。将连续递增的数据的首尾的数据分别存储在map集合的key和value之中,输出时判断首尾值是否相同采用两种方式输出 

复杂度分析

  • 时间复杂度:O(n),其中 n 为数组的长度。
  • 空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。

import java.util.HashMap;

public class SummaryIntervals {
    public static HashMap summaryIntervals(int[] nums) {
        HashMap 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 map = summaryIntervals(nums3);

        for (HashMap.Entry entry : map.entrySet()) {
            // 处理每个键值对
            if (entry.getKey() == entry.getValue()) {//判断map集合的key和value值是否相同
                System.out.print(entry.getKey() + " ");
            } else {//不相同
                System.out.print(entry.getKey() + "-->" + entry.getValue() + " ");
            }
        }
    }
}

你可能感兴趣的:(算法)