「優選算法刷題」:最后一塊石頭的重量

一、題目

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

每一回合,從中選出兩塊?最重的?石頭,然后將它們一起粉碎。假設石頭的重量分別為?x?和?y,且?x <= y。那么粉碎的可能結果如下:

  • 如果?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],這就是最后剩下那塊石頭的重量。

提示:

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

二、思路解析

這道題要用到 “大根堆” 這個容器來解決,因為大根堆可以快速幫我們把元素排序成升序狀態。

然后就要讓兩個堆頂元素比較大小,看看能否粉碎。

有一個細節,因為 a 是在 b 之前的堆頂元素,所以 a 只可能是大于或等于 b ,而不可能是小于。

所以在判斷他們二者大小的時候,我們只需要討論 a > b 的情況即可,然后把差值 a - b 插入大根堆。

具體實現請看下面代碼👇

三、完整代碼

class Solution {public int lastStoneWeight(int[] stones) {PriorityQueue<Integer> heap = new PriorityQueue<>((a, b) -> b - a);for(int x : stones){heap.offer(x);}while(heap.size() > 1){int a = heap.poll();int b = heap.poll();if(a > b){heap.offer(a - b);}}return heap.isEmpty() ? 0 : heap.peek();}
}

以上就是本篇博客的全部內容啦,如有不足之處,還請各位指出,期待能和各位一起進步!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714014.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flutter開發之CupertinoApp

Flutter開發之CupertinoApp 最近由于使用Flutter編程更多&#xff0c;使用Flutter更順手&#xff0c;相對于其他前端框架來說&#xff0c;Flutter在跨平臺、響應式UI、自繪引擎、即插即用的組件和龐大的社區生態支持方面有更大的優勢&#xff1b;Flutter擁有更低的學習成本&am…

2024牛客寒假算法基礎集訓營5 H sakiko的排列構造(hard)個人補題o(╥﹏╥)o

sakiko要構造一個長度為 nnn 的排列 ppp &#xff0c;使得每一個 pii (1≤i≤n)p_ii\ (1\leq i\leq n)pi?i (1≤i≤n) 都是質數。 排列的定義為&#xff1a;長度為 nnn 的數組&#xff0c;其中 1?n1-n1?n 每個數字在數組中各出現一次。 輸入描述: 第一行輸入一個整數 n(1…

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的數字化時代扮演著越來越重要的角色&#xff0c;它們通過人工智能技術&#xff0c;可以自動批量生成各種類型的文章&#xff0c;為用戶提供了便利和效率。本文將介紹5款不同的GPT批量工具&#xff0c;并介紹一款知名的147GPT生成工具&#xff0c;以及另外一款…

c++/c圖的鄰近矩陣表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存儲頂點EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存儲鄰接矩陣int n, e; // 頂點數和邊…

JVM堆內存中新生代晉升到老年代的條件

1. 一般年齡判斷 當對象在Eden區中經過第一次 Minor GC 后&#xff0c;如果仍然存活&#xff0c;則會被移動到 From Survivor 區&#xff0c;并且對象的年齡設為 1。每經過一次 Minor GC&#xff0c;存活下來的對象年齡加 1&#xff0c;若存活對象在 From Survivor 區的年齡達…

netlink原理及應用

什么是netlink netlink是一種基于網絡的通信機制&#xff0c;允許內核內部、內核與用戶態應用之間甚至用戶態應用之間進行通信&#xff1b;netlink的主要作用是內核與用戶態之間通信&#xff1b;它的思想是&#xff0c;基于BSD的socket使用網絡框架在內核和用戶態之間進行通信…

GaussDB跨云容災:實現跨地域的數據庫高可用能力

背景 金融、銀行業等對數據的安全有著較高的要求&#xff0c;同城容災建設方案&#xff0c;在絕大多數場景下可以保證業務數據的安全性&#xff0c;但是在極端情況下&#xff0c;如遇不可抗力因素等&#xff0c;要保證數據的安全性&#xff0c;就需要采取跨地域的容災方案。 …

Dell R730 2U服務器實踐3:安裝英偉達上代專業AI訓練Nvidia P4計算卡

Dell R730是一款非常流行的服務器&#xff0c;2U的機箱可以放入兩張顯卡&#xff0c;這次先用一張英偉達上代專業級AI訓練卡&#xff1a;P4卡做實驗&#xff0c;本文記錄安裝過程。 簡潔步驟&#xff1a; 打開機箱將P4顯卡插在4號槽位關閉機箱安裝驅動 詳細步驟&#xff1a; 對…

2024目前三種有效加速國內Github

大家好我是咕嚕美樂蒂&#xff0c;很高興又和大家見面了&#xff01;截至2024年&#xff0c;國內訪問 GitHub 的速度受到多種因素的影響&#xff0c;包括網絡封鎖、地理距離、網絡帶寬等。為了提高國內用戶訪問 GitHub 的速度&#xff0c;以下是目前較為有效的三種加速方式&…

網絡工程師學習筆記——VRP配置命令大全

VRP是Versatile Routing Platform的簡稱&#xff0c;它是華為公司數據通信產品的通用網絡操作系統。它以IP業務為核心&#xff0c;采用組件化的體系結構&#xff0c;在實現豐富功能特性的同時&#xff0c;還提供了基于應用的可裁剪和可擴展的功能&#xff0c;使得路由器和交換機…

計算機網絡物理層知識點總結

本篇博客是基于謝希仁編寫的《計算機網絡》和王道考研視頻總結出來的知識點&#xff0c;本篇總結的主要知識點是第二章的物理層。上一章的傳送門&#xff1a;計算機網絡體系結構-CSDN博客 通信基礎 物理層概念 物理層解決如何在連接各種計算機的傳輸媒體上傳輸數據比特流&am…

【Kubernetes】k8s中容器之間、pod之間如何進行網絡通信?

目錄 PodKubernetes 網絡模型同一Pod上的容器之間進行通信同一Node上的不同Pod之間進行通信不同Node上的Pod之間進行通信Service參考 Pod 首先來回顧一下Pod&#xff1a; Pod 是用于構建應用程序的最小可部署對象。單個 Pod 代表集群中正在運行的工作負載&#xff0c;并封裝一…

C++初階篇----類與對象上卷

目錄 引言1.面向過程和面向對象初步認識2.類的引入3.類的定義3.1聲明與定義全部放在類體中3.2聲明與定義分離 4.類的訪問限定符及封裝4.1訪問限定符4.2封裝 5.類的作用域6.類的實例化類是對對象進行描述一個類&#xff08;一個類型變量&#xff09;可以實例化出多個對象 7.類對…

Day12-【Java SE進階】JDK8新特性:Lambda表達式、方法引用、常見算法、正則表達式、異常

一、JDK8新特性 1.Lambda表達式 Lambda表達式是JDK 8開始新增的一種語法形式;作用:用于簡化名內部類的代碼寫法。 注意:Lambda表達式并不是說能簡化全部匿名內部類的寫法&#xff0c;只能簡化函數式接口的匿名內部類。 有且僅有一個抽象方法的接口。注意:將來我們見到的大部…

分布式事務簡介

分布式事務簡介&#xff0c;通過組內分享學習到的知識&#xff0c;并進行討論。 主要內容 分布式事務簡介 分布式事務是指跨越多個數據庫或服務的一系列操作&#xff0c;這些數據庫或服務可能分布在網絡的不同節點上&#xff0c;它們共同組成一個完整的邏輯工作單元&#xf…

GEE必須會教程—蒸散發數據時間序列分析與下載

今天帶來的有關蒸散發數據的下載代碼&#xff0c;蒸散發數據在氣象氣候&#xff0c;農業干旱監測等領域應用廣泛&#xff0c;那么在GEE上如何方便快捷獲取蒸散發數據呢&#xff1f;今天跟著小編分享代碼&#xff0c;快來學習吧&#xff01;&#xff01; A.定義研究區域 //定義…

JSON-RPC 快速開始

文章目錄 JSON-RPC什么是JSON-RPCJSON-RPC java開源實現JSON-PRC go開源實現JSON-RPC 和 Restful 都屬于什么&#xff1f;RPC、JSON-RPC和HTTP區別 以太坊使用json-rpc&#xff1f;JSON-RPC和gRPCWEB開發中&#xff0c;使用JSON-RPC好&#xff0c;還是RESTful API好&#xff1f…

【前端素材】推薦優質數據統計后臺管理系統網頁Cleopatra.平臺模板(附源碼)

一、需求分析 在線后臺管理系統是指供管理員或運營人員使用的Web應用程序&#xff0c;用于管理和監控網站、應用程序或系統的運行和數據。它通常包括一系列工具和功能&#xff0c;用于管理用戶、內容、權限、數據等。下面是關于在線后臺管理系統的詳細分析&#xff1a; 1、功…

ssh簡介以及 windows 安裝ssh教程

SSH&#xff08;Secure Shell&#xff09;是一種網絡協議&#xff0c;用于計算機之間的加密登錄和其他安全網絡服務。通過 SSH&#xff0c;用戶可以安全地訪問遠程計算機&#xff0c;執行命令、傳輸文件等操作。SSH 使用公鑰加密技術&#xff0c;確保數據傳輸的安全性。本文將從…

TypeScript 哲學 - 2、Narrowing

四種類型守衛 1、truthiness narrowing 2、 3、 4、 control flow analysis