Java 数组区间汇总算法 - 最小有序区间范围列表
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;
}
}
算法解释:
- 初始化一个空列表
res用来存储结果。 - 遍历数组
nums,使用start变量记录当前区间的起始数字。 - 如果当前数字
nums[i]与前一个数字nums[i-1]相差 1,则继续遍历下一个数字。 - 如果当前数字
nums[i]与前一个数字nums[i-1]相差大于 1,或者到达数组末尾,则将当前区间添加到res中。 - 如果区间只有一个数字,则直接将该数字添加到
res中。 - 如果区间包含多个数字,则将起始数字和终止数字以
start->end的格式添加到res中。 - 重置
start为当前数字,继续遍历下一个数字。 - 返回结果列表
res。
**时间复杂度:**O(n),其中 n 是数组的长度。
**空间复杂度:**O(n),其中 n 是结果列表的长度。
总结:
本算法使用简洁的代码实现,能够有效地将有序整数数组转换为最小有序区间范围列表。
原文地址: https://www.cveoy.top/t/topic/ohx8 著作权归作者所有。请勿转载和采集!