【前端算法】1046. 最後一塊石頭的重量,暴力解法

有一堆石頭,每塊石頭的重量都是正整數。數組

每一回合,從中選出兩塊 最重的 石頭,而後將它們一塊兒粉碎。假設石頭的重量分別爲 x 和 y,且 x <= y。那麼粉碎的可能結果以下:spa

  • 若是 x == y,那麼兩塊石頭都會被徹底粉碎;
  • 若是 x != y,那麼重量爲 x 的石頭將會徹底粉碎,而重量爲 y 的石頭新重量爲 y-x。
  • 最後,最多隻會剩下一塊石頭。返回此石頭的重量。若是沒有石頭剩下,就返回 0。
示例:
輸入:[2,7,4,1,8,1]
輸出:1
解釋:
先選出 7 和 8,獲得 1,因此數組轉換爲 [2,4,1,1,1],
再選出 2 和 4,獲得 2,因此數組轉換爲 [2,1,1,1],
接着是 2 和 1,獲得 1,因此數組轉換爲 [1,1,1],
最後選出 1 和 1,獲得 0,最終數組轉換爲 [1],這就是最後剩下那塊石頭的重量。

提示:code

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 1000

解題思路:blog

  • 1.將排序
  • 2.最大的減去次大石頭的重量
  • 3.刪除第二項,改變首項相減的值;
  • 4.從新排序,直至數組長度小於1

解題代碼排序

/**
 * @param {number[]} stones
 * @return {number}
 */
var lastStoneWeight = function(stones) {
    while (stones.length > 1) {
        stones.sort((a, b) => b - a);
        stones[0] = stones[0] - stones[1];
        stones.splice(1, 1);
    }
    return stones.length === 0 ? 0 : stones[0]
};

執行結果圖片

圖片.png

相關文章
相關標籤/搜索