前往
大廳
主題

LeetCode - 462. Minimum Moves to Equal Array Elements II 解題心得

Not In My Back Yard | 2021-06-18 00:00:01 | 巴幣 0 | 人氣 280

題目連結:


題目意譯:
給定一個大小為 n 的整數陣列 nums,回傳讓陣列中的元素全部相等最少所需的操作數。

在一次操作中,你可以將陣列中的一個元素增加或是減少 1 。

限制:
n == nums.length
1 ≦ nums.length ≦ 10 ^ 5
-10 ^ 9 ≦ nums[i] ≦ 10 ^ 9



範例測資:
範例 1:
輸入: nums = [1,2,3]
輸出: 2
解釋:
只需兩次操作即可(記住,每次操作會增加或是減少一個元素之值)
[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

範例 2:
輸入: nums = [1,10,2,9]
輸出: 16


解題思維:
因為陣列的元素最後都會變成同一個值。假設最後變成的值為 K ,則操作數為
|nums[0] - K| + |nums[1] - K| + …… + |nums[n - 1] - K|
而我們需要將其值最小化。因此可以看到本題即等價於這題

所以我們將 nums 排序,然後求其中位數即得到一個使上式值最小的 K 值。接著帶進去便可以求得所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作