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

本文介绍了用 Java 实现数组区间汇总算法的解决方案,并提供了详细代码示例。该算法可以将一个无重复元素的有序整数数组,转化为覆盖所有数字的最小有序区间范围列表,确保每个元素被恰好一个区间覆盖,且不存在范围外的数字。

问题描述:

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

代码示例:

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();
        int n = nums.length;
        int i = 0;
        while (i < n) {
            int j = i;
            while (j < n - 1 && nums[j + 1] == nums[j] + 1) {
                j++;
            }
            if (i == j) {
                res.add(String.valueOf(nums[i]));
            } else {
                res.add(nums[i] + '->' + nums[j]);
            }
            i = j + 1;
        }
        return res;
    }
}

算法思路:

  1. 初始化一个空列表 res 来存储结果区间范围。
  2. 使用两个指针 ij 遍历数组 nums
  3. i 开始,使用 j 寻找连续的数字序列。
  4. 如果 ij 相等,表示当前只有一个数字,将其单独添加到 res 中。
  5. 如果 ij 不相等,表示当前存在连续数字序列,将其范围 nums[i]nums[j] 添加到 res 中。
  6. i 指针移至 j + 1,继续寻找下一个连续数字序列。
  7. 最后返回 res 列表。

代码解析:

  1. List<String> res = new ArrayList<>();:创建一个空列表来存储结果区间范围。
  2. int n = nums.length;:获取数组长度。
  3. int i = 0;:初始化 i 指针为 0,指向数组的第一个元素。
  4. while (i < n):循环遍历数组,直到 i 指针到达数组末尾。
  5. int j = i;:初始化 j 指针为 i,指向当前数字。
  6. while (j < n - 1 && nums[j + 1] == nums[j] + 1):使用 j 指针寻找连续的数字序列,直到遇到下一个数字不等于当前数字加 1 时停止。
  7. if (i == j):如果 ij 相等,表示当前只有一个数字,将其单独添加到 res 中。
  8. else:如果 ij 不相等,表示当前存在连续数字序列,将其范围 nums[i]nums[j] 添加到 res 中。
  9. i = j + 1;:将 i 指针移至 j + 1,继续寻找下一个连续数字序列。
  10. return res;:返回存储所有区间范围的 res 列表。

总结:

本文介绍了 Java 实现数组区间汇总算法的解决方案,并提供了详细代码示例。该算法可以将一个无重复元素的有序整数数组,转化为覆盖所有数字的最小有序区间范围列表,确保每个元素被恰好一个区间覆盖,且不存在范围外的数字。

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

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

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