Minimum Moves to Equal Array Elements 最小移動次數使陣列元素相等
給定一個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n - 1 個元素增加 1。
示例:
輸入: [1,2,3] 輸出: 3 解釋: 只需要3次移動(注意每次移動會增加兩個元素的值): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
思路:這是一道純數學問題,假設陣列總和為sum,最小值為min_number,那麼滿足如下等式:
sum+m*(n-1)=n*x //其中x為最終相等的值,n為陣列的長度,m是移動的次數
由於觀察到:x=min_number+m,這個等式的意思是:最終相等的值一定是由最小的數min_number+移動的次數m得到的。這裡有反證法,先預設成立。
那麼化簡等式:m=sum-min_number*n
這裡證明等式,假設不是由最小值加m次得到x的,假設是由另外一個值p加m次得到x的,那麼對於最小值min_number來說,被加的次數一定小於x,所以條件不成立。一定是最小的那個值加了m次得到的x。
參考程式碼:
class Solution {
public:
int minMoves(vector<int>& nums) {
if (nums.size() <= 1) return 0;
int min_number = nums[0];
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
if (min_number > nums[i]) min_number = nums[i];
}
return sum - min_number * nums.size();
}
};
相關文章
- 【Leetcode】453. Minimum Moves to Equal Array ElementsLeetCode
- leetcode:462. 最少移動次數使陣列元素相等 II(數學,中等)LeetCode陣列
- 3224. 使差值相等的最少陣列改動次數陣列
- JavaScript刪除array陣列元素JavaScript陣列
- 陣列中每個陣列元素出現的次數陣列
- 旋轉陣列中的最小元素陣列
- Array · 刪除陣列中指定的元素陣列
- 3354. 使陣列元素等於零陣列
- 3229. 使陣列等於目標陣列所需的最少操作次數陣列
- Array · 判斷某元素是否在陣列中陣列
- 找出陣列中元素出現次數超過陣列長度一半的元素陣列
- 統計陣列元素中每個元素出現的次數陣列
- jQuery遍歷array陣列元素程式碼例項jQuery陣列
- Array陣列陣列
- TPU &“脈動陣列”(systolic array)陣列
- js找出陣列中出現最多的元素和次數JS陣列
- 統計陣列中各數字(元素)出現的次數陣列
- 陣列元素的數量陣列
- java 兩個列表的元素是否相等且各自元素數量相等Java
- Matlab 統計陣列中各數字(元素)出現的次數Matlab陣列
- JavaScript Array 陣列JavaScript陣列
- 移除陣列 arr 中的所有值與 item 相等的元素。不要直接修改陣列 arr,結果返回新的陣列陣列
- 矩陣中移動的最大次數.18076762矩陣
- 比較兩個陣列是否相等陣列
- 判斷陣列裡面的json 物件是否相等,相等則移除陣列JSON物件
- JZ-032-把陣列排成最小的數陣列
- 陣列中未出現的最小正整數陣列
- 如何從整數陣列中找到最大和最小數陣列
- day05陣列array陣列
- 內建物件--Array(陣列)物件陣列
- 【LeetCode-陣列】查詢大多數元素LeetCode陣列
- 陣列元素逆序陣列
- 程式設計求一維陣列中最大和最小的元素值程式設計陣列
- 找到無序陣列中最小的k個數陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 1452: 陣列最小值陣列
- [求解]陣列,分成倆個陣列,陣列值之和的相差最小。陣列