給定乙個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n - 1 個元素增加 1
。
示例:
輸入:[1,2,3]
輸出:3
解釋:只需要3次移動(注意每次移動會增加兩個元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
自己的思考:
一、
剛開始哈,我也沒管太多(增加1)。
思路是這樣的
先排序、找到最小值、讓剩下的數都減去最小值
繼續排序、重複
直到最小值-最大值==0結束
。。。。完了之後吧、我的錯誤**陷入了死迴圈
二、
先不管最後的結果是哪個數
先排序比如陣列[1,3,5]
找到最大的數、這裡為5
要想讓剩下的數都變成一樣的
那麼對於3來說,它需要加2次1
對於1來說,需要加4次1
所以等到最後都變成5時
一共加了2+4次
也就可以推出:移動次數=(最大值-剩下值們)的和
function
findminmoves
(arr)
return sum;
}
還有一種解法、乙個公式
移動次數=和-最小值*長度
我剛開始其實哈沒明白這公式為啥這樣寫
可能是數學沒學好
完了就自己分析、推唄
陣列[1,3,5]
按照公式來算
moves=(1+3+5)-1*3=6
(最小值*長度)=》假如陣列中的值都為最小值、和的結果是多少
(和-最小值 長度)=》差就是剩下的數和最小值差的和
**
function
findminmoves
(arr)
return sum-arr[0]
*arr.length;
}
演算法刷題 筆記(Day2)
題目描述 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。解題思路 一 1.回文數的先決條件x 0.2.利用序列型別資料的性質,先轉字串再進行切片翻轉str 1 題解 class solution def ispalindrome self,x int boo...
《演算法筆記》Day 2
全排列問題 include const int maxn 11 int n,p maxn hashtable maxn void generatep int index printf n return for int x 1 x n x int main void 推演 hashtable fals...
Leetcode刷題之旅(Day2)
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...