LeetCode:228(Python)—— 汇总区间(简单)

2023-10-28

汇总区间

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

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

输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]

方法一:列表+边界

思路:本题思路并不复杂,难点在于边界的处理。依次循环判断,对于头部和尾部单独判断即可。

# 列表+边界
# 本题思路并不复杂,难点在于边界的处理。
# 依次循环判断,对于头部和尾部单独判断即可。
class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        tmp, ans, n = [], [], len(nums)
        if n == 1:
            return [str(nums[0])]
        for i in range(n - 1):
            if nums[i] + 1 == nums[i + 1]:
                tmp.append(nums[i])
                if i == (n - 2):
                    tmp.append(nums[i])
                    tmp.append(nums[i + 1])
                    ans.append(tmp)
            else:
                tmp.append(nums[i])
                ans.append(tmp)
                tmp = []
                if i == (n - 2):
                    ans.append([nums[n - 1]])
        output = []
        for i in ans:
            tmp = ''
            if len(i) > 1:
                tmp += str(i[0]) + '->' + str(i[-1])
            if len(i) == 1:
                tmp += str(i[0])
            output.append(tmp)
        return output

方法二:列表+边界(优化)

思路:首先在尾部添加了一个上限值,减少了边界判断。然后定义一个哨点作为区间的头节点,依次循环判断即可。

# 列表+边界(优化)
# 首先在尾部添加了一个上限值,减少了边界判断。
# 然后定义一个哨点作为区间的头节点,依次循环判断即可。
class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        nums.append(2 ** 32)
        ans, start = [], 0 
        for i in range(1, len(nums)):
            if nums[i] - nums[i - 1] > 1:
                if i - 1 == start:
                    ans.append(str(nums[start]))
                else:
                    ans.append(f"{nums[start]}->{nums[i - 1]}")
                start = i
        return ans

总结

只有我仍然被简单题锤吗。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode:228(Python)—— 汇总区间(简单) 的相关文章

随机推荐