Python程式:返回給定列表右側較小元素的數量


假設我們有一個名為nums的數字列表,我們將建立一個新的列表,其中新列表中的每個元素都是原始輸入列表中該元素右側較小元素的數量。

因此,如果輸入類似於nums = [4, 5, 9, 7, 2],則輸出將為[1, 1, 2, 1, 0],因為4的右側有1個較小元素,5的右側有1個較小元素,9的右側有2個較小元素,7的右側有1個較小元素,2的右側沒有較小元素。

為了解決這個問題,我們將遵循以下步驟:

  • res := 新列表,inc := 新列表

  • 當nums不為空時,執行以下操作:

    • num := 從nums中刪除最後一個元素

    • 將插入num到inc中的最左索引插入到res的末尾

    • 插入num到inc後排序的列表

  • 返回列表res[從索引0到結尾]

讓我們看看下面的實現,以便更好地理解:

示例

線上演示

import bisect
class Solution:
   def solve(self, nums):
      res, inc = [], []
      while nums:
         num = nums.pop()
         res.append(bisect.bisect_left(inc, num))
         bisect.insort(inc, num)
      return res[::-1]
ob = Solution()
nums = [4, 5, 9, 7, 2]
print(ob.solve(nums))

輸入

[4, 5, 9, 7, 2]

輸出

[1, 1, 2, 1, 0]

更新於:2020年10月10日

309 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告