演算法題Day2 最小移動次數

2021-09-26 07:16:44 字數 1209 閱讀 6572

給定乙個長度為 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 輸出 ...