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

2021-09-12 07:25:08 字數 1477 閱讀 1219

給定乙個整數陣列 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...