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

2021-10-08 00:26:02 字數 1205 閱讀 1433

題目描述:

給定乙個整數陣列 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 個更小的元素.

class

solution

temp =

newint

[nums.length]

; count =

newint

[nums.length]

; index =

newint

[nums.length]

;for

(int i =

0; i < nums.length; i++

)mergesort

(nums,

0,nums.length-1)

;for

(int i : count)

return list;

}private

void

mergesort

(int

nums,

int l ,

int r)

int mid = l +

(r - l)/2

;mergesort

(nums,l,mid)

;mergesort

(nums,mid+

1,r)

;merge

(nums,l,mid,r);}

private

void

merge

(int

nums,

int l,

int mid,

int r)

for(

int i = l;i <= r;i++

)else

if(p2 > r)

else

if(nums[temp[p1]

]<= nums[temp[p2]])

else}}

}

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...

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

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

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

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