315 計算右側小於當前元素的個數

2021-10-08 14:48:30 字數 671 閱讀 3785

給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質: counts[i] 的值是  nums[i] 右側小於 nums[i] 的元素的數量。

示例:輸入:[5,2,6,1]

輸出:[2,1,1,0] 

解釋:5 的右側有 2 個更小的元素 (2 和 1)

2 的右側僅有 1 個更小的元素 (1)

6 的右側有 1 個更小的元素 (1)

1 的右側有 0 個更小的元素

1.暴力

2.優化第2層迴圈,這樣想,假如當前遍歷的5,怎麼找後面5大於幾個數,如果後面的數是排序的1,2,6那麼我們就可以用二分查詢來確定答案(下標就是大於的個數)。

class solution:

def countsmaller(self, nums: list[int]) -> list[int]:

if not nums:return

sort_tmp=

res=

for n in nums[::-1]:

index=bisect.bisect_left(sort_tmp,n)

bisect.insort(sort_tmp,n)

return res[::-1]

315 計算右側小於當前元素的個數

給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質 counts i 的值是nums i 右側小於nums i 的元素的數量。示例 輸入 5,2,6,1 輸出 2,1,1,0 解釋 5 的右側有2個更小的元素 2 和 1 2 的右側僅有1個更小的元素 1 6...

LC 315 計算右側小於當前元素的個數

傳送門 思路 離散化權值樹狀陣列。顯然因為可能存在負數,所以先離散化一波,然後從右到左遍歷,將詢問值儲存起來,然後更新即可。define lowbit x x x class solution int query int x return ans vector int countsmaller ve...

315 計算右側小於當前元素的個數(困難題)

題目描述 給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質 counts i 的值是 nums i 右側小於 nums i 的元素的數量。示例 輸入 5,2,6,1 輸出 2,1,1,0 解釋 5 的右側有 2 個更小的元素 2 和 1 2 的右側僅有 1...