溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何解決最少移動次數使數組元素相等的問題

發(fā)布時間:2022-01-17 14:50:50 來源:億速云 閱讀:143 作者:清風 欄目:大數據

這篇“java如何解決最少移動次數使數組元素相等的問題”文章,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要參考一下,對于“java如何解決最少移動次數使數組元素相等的問題”,小編整理了以下知識點,請大家跟著小編的步伐一步一步的慢慢理解,接下來就讓我們進入主題吧。

給定一個非空整數數組,找到使所有數組元素相等所需的最小移動數,其中每次移動可將選定的一個元素加1或減1。您可以假設數組的長度最多為10000。

例如:

輸入:
[1,2,3]

輸出:
2

說明:

只有兩個動作是必要的(記得每一步僅可使其中一個元素加1或減1):


[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

答案:

1public int minMoves2(int[] nums) {
2    Arrays.sort(nums);
3    int i = 0, j = nums.length - 1;
4    int count = 0;
5    while (i < j) {
6        count += nums[j--] - nums[i++];
7    }
8    return count;
9}

解析:

這題其實更像是一道數學題,先來分析一下,我們假設把兩個數a,b(a<=b)經過最少的轉換最終變?yōu)閤。這里有3種情況

1,x<=a,轉變次數為(a-x)+(b-x)=(a+b)-2x;

2,a<=x<=b,轉變次數為(x-a)+(b-x)=b-a;

3,x>=b,轉變次數為(x-a)+(x-b)=2x-(a+b);

所以很明顯第二種情況轉換的次數是最少的,也就是說x在a和b之間的時候,轉換的次數是最少的。我們可以使用極限法證明

1,當x=a時取最小值,最小值是(a+b)-2a=b-a;

3,當x=b時取最小值,最小值是2b-(a+b)=b-a;

所以這個問題就很好解決了,我們只需要把數組排好序,當數組長度為2的時候,只需要大的減小的即可,當數組長度為3的時候,我們只需要計算中間值與那兩個數差的絕對值的和即可(或者是最后一個減去第一個),當數組長度為n的時候,我們只需要找到最中間值,然后每一個數與他的差的絕對值相加即可。

Java有哪些集合類

Java中的集合主要分為四類:1、List列表:有序的,可重復的;2、Queue隊列:有序,可重復的;3、Set集合:不可重復;4、Map映射:無序,鍵唯一,值不唯一。

以上是“java如何解決最少移動次數使數組元素相等的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI