給定乙個整數陣列 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 個更小的元素.
方法一:蠻力法。時間複雜度o(n2),額外的空間複雜度o(n)
方法二:使用map容器(預設是按照key從小到大進行排序)進行標記。時間複雜度o(nlog2n),額外的空間複雜度o(n)
class solution
result[i] += pair.second;
}//將nums[i]標記出現次數增加
方法三:構建二叉搜尋樹。利用二叉搜尋樹的特性,計算比當前節點小的個數。時間複雜度o(nlog2n),額外的空間複雜度o(n)
二叉搜尋樹的特性:中序遍歷序列嚴格遞增。請參考 leetcode 驗證二叉搜尋樹
class solution
};public:
//將insert_node插入node二叉搜尋樹中,並將node中節點值比insert_node小的個數放入count_small中
void bst_insert(bstnode *treeroot, bstnode *insert_node, int &count_small)else
}elseelse}}
vectorcountsmaller(vector& nums)
int node_vecsize = node_vec.size();
vectorresult(node_vecsize, 0);
//將第n - 2到0第個節點插入到以第n - 1節點為根節點的二叉排序樹中
//插入過程中計算每個節點的countsmaller
leetcode315 計算右側小於當前元素的個數
給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質 counts i 的值是 nums i 右側小於 nums i 的元素的數量。示例 輸入 5,2,6,1 輸出 2,1,1,0 解釋 5 的右側有 2 個更小的元素 2 和 1 2 的右側僅有 1 個更小的...
計算右側小於當前元素個數
給定乙個整數陣列 nums,按要求返回乙個新陣列 counts。陣列 counts 有該性質 counts i 的值是 nums i 右側小於 nums i 的元素的數量。示例 輸入 5,2,6,1 輸出 2,1,1,0 解釋 5 的右側有 2 個更小的元素 2 和 1 2 的右側僅有 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...