【Leetcode每日笔记】228. 汇总区间(Python)

文章目录

  • 题目
  • 解题思路
    • 一次遍历
  • 代码

题目

给定一个无重复元素的有序整数数组 nums 。

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

列表中的每个区间范围 [a,b] 应该按如下格式输出:

"a->b" ,如果 a != b
"a" ,如果 a == b

示例 1:

输入:nums = [0,1,2,4,5,7] 输出:[“0->2”,“4->5”,“7”] 解释:区间范围是: [0,2] -->
“0->2” [4,5] --> “4->5” [7,7] --> “7”

示例 2:

输入:nums = [0,2,3,4,6,8,9] 输出:[“0”,“2->4”,“6”,“8->9”] 解释:区间范围是: [0,0]
–> “0” [2,4] --> “2->4” [6,6] --> “6” [8,9] --> “8->9”

示例 3:

输入:nums = [] 输出:[]

示例 4:

输入:nums = [-1] 输出:["-1"]

示例 5:

输入:nums = [0] 输出:[“0”]

提示:

0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums 中的所有值都 互不相同
nums 按升序排列

解题思路

一次遍历

比较当前位置与前一个位置是否是连续的,连续的继续遍历,否则记录进入结果列表,在继续遍历。

代码

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        if not nums:
            return []
        ans = []
        n = [nums[0],nums[0]]
        for i in range(1,len(nums)):
            if nums[i] == nums[i-1] + 1:
                n[1] = nums[i]
            else:
                n[1] = nums[i-1]
                if n[0] != n[1]:
                    ans.append('%d->%d'%(n[0],n[1]))
                else:
                    ans.append('%d'%n[0])
                n[0] = nums[i]
        if n[0] < n[1]:
             ans.append('%d->%d'%(n[0],n[1]))
        else:
            ans.append('%d'%n[0])
        return ans

你可能感兴趣的:(LeetCode一周一结,列表,leetcode,数据结构,python,算法)