Java 数组区间汇总算法 - 最小有序区间范围列表

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

示例:

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

代码实现:

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

算法解释:

  1. 初始化一个空列表 res 用来存储结果。
  2. 遍历数组 nums,使用 start 变量记录当前区间的起始数字。
  3. 如果当前数字 nums[i] 与前一个数字 nums[i-1] 相差 1,则继续遍历下一个数字。
  4. 如果当前数字 nums[i] 与前一个数字 nums[i-1] 相差大于 1,或者到达数组末尾,则将当前区间添加到 res 中。
  5. 如果区间只有一个数字,则直接将该数字添加到 res 中。
  6. 如果区间包含多个数字,则将起始数字和终止数字以 start->end 的格式添加到 res 中。
  7. 重置 start 为当前数字,继续遍历下一个数字。
  8. 返回结果列表 res

**时间复杂度:**O(n),其中 n 是数组的长度。

**空间复杂度:**O(n),其中 n 是结果列表的长度。

总结:

本算法使用简洁的代码实现,能够有效地将有序整数数组转换为最小有序区间范围列表。

Java 数组区间汇总算法 - 最小有序区间范围列表

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

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