Python 数组区间汇总算法详解:高效解决无重复元素有序数组的区间覆盖问题
Python 数组区间汇总算法详解:高效解决无重复元素有序数组的区间覆盖问题
给定一个无重复元素的有序整数数组 nums,返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。
示例 1:
输入:nums = [1,3,6,9,11] 输出:['1->3','6->9','11'] 解释:每个数字都恰好被某个区间范围所覆盖:
- [1,3] 之间包含 1 和 3 。
- [6,9] 之间包含 6、7、8 和 9 。
- [11,11] 之间仅包含 11 。
- [4,5] 之间既不包含 4 也不包含 5 ,因此它们不在结果中。
示例 2:
输入:nums = [1,2,3,4,5] 输出:['1->5'] 解释:整个数组都恰好被某个区间范围所覆盖。
思路:
- 用两个指针
start和end,分别指向第一个数和第二个数。 - 如果
end比下一个数小 1,则end继续移动。 - 如果
end比下一个数大 1,则说明找到一个区间,将区间添加到结果列表中,start指向下一个数,end指向下下一个数。 - 遍历完整个数组后,如果
start小于最后一个数,则说明还有一个区间没有添加到结果列表中,将这个区间添加到结果列表中。
Python 代码实现:
def summaryRanges(nums):
result = []
start = 0
end = 1
while end < len(nums):
if nums[end] == nums[end - 1] + 1:
end += 1
else:
if start == end - 1:
result.append(str(nums[start]))
else:
result.append(str(nums[start]) + '->' + str(nums[end - 1]))
start = end
end += 1
if start < len(nums):
if start == len(nums) - 1:
result.append(str(nums[start]))
else:
result.append(str(nums[start]) + '->' + str(nums[len(nums) - 1]))
return result
代码解释:
- 初始化一个空列表
result用于存储结果。 - 初始化两个指针
start和end,分别指向第一个数和第二个数。 - 循环遍历数组,直到
end指针到达数组末尾。 - 如果
end指向的数字比end前一个数字大 1,则end指针继续向后移动。 - 否则,说明找到了一个区间,将区间添加到
result列表中,并更新start和end指针。 - 遍历完整个数组后,如果
start指针还没有到达数组末尾,说明还存在一个区间没有被添加到result列表中,将这个区间添加到result列表中。
使用方法:
nums = [1,3,6,9,11]
result = summaryRanges(nums)
print(result) # 输出: ['1->3', '6->9', '11']
总结:
本文介绍了如何用 Python 实现数组区间汇总算法,并通过示例和代码分析了算法的思路和实现方法。希望本文能够帮助你理解并掌握该算法。
原文地址: https://www.cveoy.top/t/topic/ohv1 著作权归作者所有。请勿转载和采集!