汇总区间Python解法
生活随笔
收集整理的這篇文章主要介紹了
汇总区间Python解法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個 無重復元素 的 有序 整數數組 nums 。
返回 恰好覆蓋數組中所有數字 的 最小有序 區間范圍列表 。也就是說,nums 的每個元素都恰好被某個區間范圍所覆蓋,并且不存在屬于某個范圍但不屬于 nums 的數字 x 。
列表中的每個區間范圍 [a,b] 應該按如下格式輸出:
"a->b" ,如果 a != b
"a" ,如果 a == b
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/summary-ranges
?
例:
輸入:nums = [0,1,2,4,5,7]
輸出:["0->2","4->5","7"]
解釋:區間范圍是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"
解析:
雙指針,一個左一個右,用右邊的指針和后一位進行判斷,大一則后移,否則將左右指針中間的值存入結果中,然后左右指針全部指向右指針的后一位從新開始判斷。
class Solution(object):def summaryRanges(self, nums):""":type nums: List[int]:rtype: List[str]"""res = [] # 存儲結果的列表left, right = 0, 0 # 左右指針for i in range(len(nums)): # 遍歷if i == len(nums) - 1: # 遍歷到邊界時if left != right: # 左右指針沒有指向同一位res.append(r"{}->{}".format(nums[left], nums[right])) # 存入列表else: # 左右指針指向同一位時res.append(r"{}".format(nums[left]))elif nums[i] == (nums[i+1] - 1): # 右指針和下一位只差一right = i+1elif nums[i] != (nums[i+1] - 1): # 不只差一if left != right:res.append(r"{}->{}".format(nums[left], nums[right]))left, right = i + 1, i + 1else:res.append(r"{}".format(nums[left]))left, right = i + 1, i + 1return res # 返回列表 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的汇总区间Python解法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ChatGPT 面对面应用程序女友小艾,
- 下一篇: 网页爬虫中文乱码问题Python