Java 数组区间汇总算法:高效生成最小区间范围列表

本文将介绍如何使用 Java 代码实现一个数组区间汇总算法,该算法可以将给定的无重复元素的有序整数数组,转化为恰好覆盖所有数字的最小有序区间范围列表。

问题描述:

给定一个无重复元素的有序整数数组 nums,返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。

示例:

输入:nums = [0,1,2,4,5,7]
输出:['0->2', '4->5', '7']

代码实现:

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> result = new ArrayList<>();
        if (nums == null || nums.length == 0) {
            return result;
        }
        int start = nums[0];
        int end = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == end + 1) {
                end = nums[i];
            } else {
                if (start == end) {
                    result.add(String.valueOf(start));
                } else {
                    result.add(start + '->' + end);
                }
                start = end = nums[i];
            }
        }
        if (start == end) {
            result.add(String.valueOf(start));
        } else {
            result.add(start + '->' + end);
        }
        return result;
    }
}

代码解释:

  1. 初始化一个空列表 result 用于存储区间范围。
  2. 判断 nums 是否为空或长度为 0,如果是则直接返回 result。
  3. 初始化 start 和 end 为 nums 的第一个元素。
  4. 遍历 nums 数组,对于每个元素 nums[i],判断它是否等于 end + 1:
    • 如果是,则更新 end 为 nums[i]。
    • 如果不是,则将当前的区间范围 [start, end] 添加到 result 列表中,并更新 start 和 end 为 nums[i]。
  5. 最后将最后一个区间范围添加到 result 列表中,并返回 result。

总结:

该算法通过遍历数组并记录连续数字的起始和结束位置,有效地将数组转化为最小有序区间范围列表,实现了数组区间汇总的功能。

拓展:

该算法可以进一步优化,例如使用双指针技术来遍历数组,提高算法效率。

希望本文对您理解 Java 数组区间汇总算法有所帮助!

Java 数组区间汇总算法:高效生成最小区间范围列表

原文地址: https://www.cveoy.top/t/topic/ohv6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录