Go語言LeetCode題解1046最后一塊石頭的重量
題目描述
1046. 最后一塊石頭的重量 - 力扣(LeetCode)
有一堆石頭,每塊石頭的重量都是正整數(shù)。
每一回合,從中選出兩塊 最重的 石頭,然后將它們一起粉碎。假設石頭的重量分別為 x
和 y
,且 x <= y
。那么粉碎的可能結果如下:
- 如果 x == y,那么兩塊石頭都會被完全粉碎;
- 如果 x != y,那么重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。
最后,最多只會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。
示例:
輸入:[2,7,4,1,8,1]
輸出:1
解釋:
先選出 7 和 8,得到 1,所以數(shù)組轉換為 [2,4,1,1,1],
再選出 2 和 4,得到 2,所以數(shù)組轉換為 [2,1,1,1],
接著是 2 和 1,得到 1,所以數(shù)組轉換為 [1,1,1],
最后選出 1 和 1,得到 0,最終數(shù)組轉換為 [1],這就是最后剩下那塊石頭的重量。
提示:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
思路分析
- 這里用到了Arrays.sort排序,得到了從小到大的數(shù)組。
- 接下來用lastIndex指針指向未被粉碎的最后一個元素,取兩個最大的石頭,下標lastIndex,lastIndex-1。兩者相減的差值賦給lastIndex-1,再移動下lastIndex指針就相當于刪除了最后一個元素了
- 也可以改寫成遞歸,思路是一樣的。
AC 代碼
import java.util.Arrays; class Solution { //一堆石頭 每一顆石頭重量都是整數(shù) // 每一回合 選出兩顆重量最大的石頭 x、y x<=y // x==y 完全粉碎 x!=y y=y-x // 最后最多會剩下一顆石頭 返回該石頭重量 如果沒有剩下 則返回0 private int lastIndex; private int left; public int lastStoneWeight(int[] stones) { lastIndex = stones.length-1; Arrays.sort(stones); while (lastIndex>=1){ left = stones[lastIndex]-stones[lastIndex-1]; if (left==0){ lastIndex=lastIndex-2; if (lastIndex==-1){ return 0; } }else { stones[--lastIndex]=left; Arrays.sort(stones); } } return stones[lastIndex]; } }
參考
非排序法 - 最后一塊石頭的重量 - 力扣(LeetCode)
以上就是Go語言LeetCode題解1046最后一塊石頭的重量的詳細內(nèi)容,更多關于Go題解最后一塊石頭重量的資料請關注腳本之家其它相關文章!
相關文章
golang中判斷請求是http還是https獲取當前訪問地址
這篇文章主要為大家介紹了golang中判斷請求是http還是https獲取當前訪問地址示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10