Go語(yǔ)言LeetCode題解1046最后一塊石頭的重量
題目描述
1046. 最后一塊石頭的重量 - 力扣(LeetCode)
有一堆石頭,每塊石頭的重量都是正整數(shù)。
每一回合,從中選出兩塊 最重的 石頭,然后將它們一起粉碎。假設(shè)石頭的重量分別為 x
和 y
,且 x <= y
。那么粉碎的可能結(jié)果如下:
- 如果 x == y,那么兩塊石頭都會(huì)被完全粉碎;
- 如果 x != y,那么重量為 x 的石頭將會(huì)完全粉碎,而重量為 y 的石頭新重量為 y-x。
最后,最多只會(huì)剩下一塊石頭。返回此石頭的重量。如果沒(méi)有石頭剩下,就返回 0。
示例:
輸入:[2,7,4,1,8,1]
輸出:1
解釋:
先選出 7 和 8,得到 1,所以數(shù)組轉(zhuǎn)換為 [2,4,1,1,1],
再選出 2 和 4,得到 2,所以數(shù)組轉(zhuǎn)換為 [2,1,1,1],
接著是 2 和 1,得到 1,所以數(shù)組轉(zhuǎn)換為 [1,1,1],
最后選出 1 和 1,得到 0,最終數(shù)組轉(zhuǎn)換為 [1],這就是最后剩下那塊石頭的重量。
提示:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
思路分析
- 這里用到了Arrays.sort排序,得到了從小到大的數(shù)組。
- 接下來(lái)用lastIndex指針指向未被粉碎的最后一個(gè)元素,取兩個(gè)最大的石頭,下標(biāo)lastIndex,lastIndex-1。兩者相減的差值賦給lastIndex-1,再移動(dòng)下lastIndex指針就相當(dāng)于刪除了最后一個(gè)元素了
- 也可以改寫成遞歸,思路是一樣的。
AC 代碼
import java.util.Arrays; class Solution { //一堆石頭 每一顆石頭重量都是整數(shù) // 每一回合 選出兩顆重量最大的石頭 x、y x<=y // x==y 完全粉碎 x!=y y=y-x // 最后最多會(huì)剩下一顆石頭 返回該石頭重量 如果沒(méi)有剩下 則返回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語(yǔ)言LeetCode題解1046最后一塊石頭的重量的詳細(xì)內(nèi)容,更多關(guān)于Go題解最后一塊石頭重量的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang中判斷請(qǐng)求是http還是https獲取當(dāng)前訪問(wèn)地址
這篇文章主要為大家介紹了golang中判斷請(qǐng)求是http還是https獲取當(dāng)前訪問(wèn)地址示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10使用Go語(yǔ)言簡(jiǎn)單模擬Python的生成器
這篇文章主要介紹了使用Go語(yǔ)言簡(jiǎn)單模擬Python的生成器,Python的generator是非??岬墓δ?用Go實(shí)現(xiàn)的代碼也較為簡(jiǎn)潔,需要的朋友可以參考下2015-08-08創(chuàng)建第一個(gè)Go語(yǔ)言程序Hello,Go!
這篇文章主要介紹了創(chuàng)建第一個(gè)Go語(yǔ)言程序Hello,Go!本文詳細(xì)的給出項(xiàng)目創(chuàng)建、代碼編寫的過(guò)程,同時(shí)講解了GOPATH、Go install等內(nèi)容,需要的朋友可以參考下2014-10-10