給定乙個整數陣列 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個更小的元素.
從最右邊開始逐步構建一顆二叉搜尋樹
樹中維護有節點的值,小於該節點的數的數量less,左右節點,相同數字的數量
在每個位置構建完成樹之後,立即計算該位置小於該數的個數,由於新的點加入之後一定是處於葉節點的。
所以從根節點開始:
1.如果節點值大於目標值,那麼遞迴到節點的左節點進行計數
2.如果節點值等於目標值,返回該節點處less的值
3.節點值小於目標值,返回節點自身數量+less+遞迴右節點(因為大於節點值也有可能小於目標值)
code:
class solution ;
};node* add(node* root,int val)
return root;
}int getnum(node* root,int val)
vectorcountsmaller(vector& nums) ;
if(n==1) return ;
vectorcount(n,0);
node*root=new node(nums[n-1],0);
for(int i=n-2;i>=0;i--)
return count;
}};
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...
315 計算右側小於當前元素的個數(困難題)
題目描述 給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質 counts i 的值是 nums i 右側小於 nums i 的元素的數量。示例 輸入 5,2,6,1 輸出 2,1,1,0 解釋 5 的右側有 2 個更小的元素 2 和 1 2 的右側僅有 1...