LeetCode简单题之最后一块石头的重量
題目
有一堆石頭,每塊石頭的重量都是正整數(shù)。
每一回合,從中選出兩塊 最重的 石頭,然后將它們一起粉碎。假設(shè)石頭的重量分別為 x 和 y,且 x <= y。那么粉碎的可能結(jié)果如下:
如果 x == y,那么兩塊石頭都會被完全粉碎;
如果 x != y,那么重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。
最后,最多只會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 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
來源:力扣(LeetCode)
解題思路
??最簡單的思路就是模擬操作。將數(shù)組排序后按照最后兩個石頭的情況進(jìn)行分析操作,如果最后倆石頭等重,那么就刪除末尾兩個,如果不等,那么就把倒數(shù)第二個刪除,然后倒數(shù)第一個計算出新的重量然后再次插入數(shù)組,這里由于數(shù)組是有序的所以可以使用二分查找來確定插入的位置,
class Solution:def lastStoneWeight(self, stones: List[int]) -> int:stones.sort()if len(stones)==1:return stones[0]while len(stones)>1:if stones[-1]==stones[-2]:stones.pop()stones.pop()else:x=stones.pop()-stones.pop()stones.insert(bisect.bisect(stones,x),x)return stones.pop() if len(stones) else 0
總結(jié)
以上是生活随笔為你收集整理的LeetCode简单题之最后一块石头的重量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之分糖果 II
- 下一篇: LeetCode简单题之连续字符