Java 数组区间汇总算法:高效生成最小有序区间列表
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;
}
}
算法思路:
- 初始化一个空列表
res来存储结果区间范围。 - 使用两个指针
i和j遍历数组nums。 - 从
i开始,使用j寻找连续的数字序列。 - 如果
i和j相等,表示当前只有一个数字,将其单独添加到res中。 - 如果
i和j不相等,表示当前存在连续数字序列,将其范围nums[i]到nums[j]添加到res中。 - 将
i指针移至j + 1,继续寻找下一个连续数字序列。 - 最后返回
res列表。
代码解析:
List<String> res = new ArrayList<>();:创建一个空列表来存储结果区间范围。int n = nums.length;:获取数组长度。int i = 0;:初始化i指针为 0,指向数组的第一个元素。while (i < n):循环遍历数组,直到i指针到达数组末尾。int j = i;:初始化j指针为i,指向当前数字。while (j < n - 1 && nums[j + 1] == nums[j] + 1):使用j指针寻找连续的数字序列,直到遇到下一个数字不等于当前数字加 1 时停止。if (i == j):如果i和j相等,表示当前只有一个数字,将其单独添加到res中。else:如果i和j不相等,表示当前存在连续数字序列,将其范围nums[i]到nums[j]添加到res中。i = j + 1;:将i指针移至j + 1,继续寻找下一个连续数字序列。return res;:返回存储所有区间范围的res列表。
总结:
本文介绍了 Java 实现数组区间汇总算法的解决方案,并提供了详细代码示例。该算法可以将一个无重复元素的有序整数数组,转化为覆盖所有数字的最小有序区间范围列表,确保每个元素被恰好一个区间覆盖,且不存在范围外的数字。
原文地址: https://www.cveoy.top/t/topic/ohyb 著作权归作者所有。请勿转载和采集!