Java 数组区间汇总算法:高效生成最小区间范围列表
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;
}
}
代码解释:
- 初始化一个空列表
result用于存储区间范围。 - 判断
nums是否为空或长度为 0,如果是则直接返回result。 - 初始化
start和end为nums的第一个元素。 - 遍历
nums数组,对于每个元素nums[i],判断它是否等于end + 1:- 如果是,则更新
end为nums[i]。 - 如果不是,则将当前的区间范围
[start, end]添加到result列表中,并更新start和end为nums[i]。
- 如果是,则更新
- 最后将最后一个区间范围添加到
result列表中,并返回result。
总结:
该算法通过遍历数组并记录连续数字的起始和结束位置,有效地将数组转化为最小有序区间范围列表,实现了数组区间汇总的功能。
拓展:
该算法可以进一步优化,例如使用双指针技术来遍历数组,提高算法效率。
希望本文对您理解 Java 数组区间汇总算法有所帮助!
原文地址: https://www.cveoy.top/t/topic/ohv6 著作权归作者所有。请勿转载和采集!