LeetCode 135:分糖果

LeetCode 135:分糖果

在這里插入圖片描述

問題本質與核心挑戰

給定孩子的評分數組,需滿足 “每個孩子至少1顆糖果,相鄰評分高的孩子糖果更多”,求最少糖果總數。核心挑戰:

  • 相鄰約束是雙向的(左→右和右→左都需滿足),直接枚舉無法高效解決;
  • 需通過 兩次貪心遍歷(左→右、右→左)分別處理單向約束,再合并結果。

核心思路:雙向貪心 + 合并約束

1. 單向約束處理(左→右遍歷)
  • 定義數組 leftleft[i] 表示 從左到右遍歷 時,第 i 個孩子應得的最少糖果(僅滿足“左邊約束”:若 ratings[i] > ratings[i-1],則 left[i] = left[i-1]+1;否則為 1)。
2. 單向約束處理(右→左遍歷)
  • 定義數組 rightright[i] 表示 從右到左遍歷 時,第 i 個孩子應得的最少糖果(僅滿足“右邊約束”:若 ratings[i] > ratings[i+1],則 right[i] = right[i+1]+1;否則為 1)。
3. 合并雙向約束
  • 每個孩子最終的糖果數為 max(left[i], right[i])(同時滿足左右約束),求和即為答案。

算法步驟詳解(以示例 ratings = [1,0,2] 為例)

步驟 1:左→右遍歷,處理左邊約束
孩子索引 i評分 ratings[i]與左邊比較(ratings[i] > ratings[i-1]left[i] 計算left 數組
01-(無左邊孩子)初始為 1[1]
100 > 1?否設為 1[1,1]
222 > 0?是left[1]+1 = 2[1,1,2]
步驟 2:右→左遍歷,處理右邊約束
孩子索引 i評分 ratings[i]與右邊比較(ratings[i] > ratings[i+1]right[i] 計算right 數組
22-(無右邊孩子)初始為 1[1]
100 > 2?否設為 1[1,1]
011 > 0?是right[1]+1 = 2[2,1,1]
步驟 3:合并約束,計算總和
孩子索引 ileft[i]right[i]max(left[i], right[i])貢獻糖果數
01222
11111
22122
總和---2+1+2=5

完整代碼(Java)

class Solution {public int candy(int[] ratings) {int n = ratings.length;if (n == 0) return 0; // 邊界處理(題目保證n≥1,可省略)// 1. 左→右遍歷,處理左邊約束int[] left = new int[n];left[0] = 1; // 第一個孩子至少1顆for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i-1]) {left[i] = left[i-1] + 1;} else {left[i] = 1;}}// 2. 右→左遍歷,處理右邊約束int[] right = new int[n];right[n-1] = 1; // 最后一個孩子至少1顆for (int i = n-2; i >= 0; i--) {if (ratings[i] > ratings[i+1]) {right[i] = right[i+1] + 1;} else {right[i] = 1;}}// 3. 合并雙向約束,計算總和int total = 0;for (int i = 0; i < n; i++) {total += Math.max(left[i], right[i]);}return total;}
}

關鍵邏輯解析

  1. 左→右遍歷:確保 “右邊孩子評分更高時,糖果數比左邊多”,但無法處理“左邊孩子評分更高,右邊需更多”的情況(如 [5,4,3,2,1],左遍歷后所有 left[i]=1,需右遍歷修正)。
  2. 右→左遍歷:確保 “左邊孩子評分更高時,糖果數比右邊多”,與左遍歷互補。
  3. 合并約束:取兩者最大值,保證同時滿足左右雙向約束,且糖果數最少(貪心思想:僅在必要時增加糖果)。

復雜度分析

  • 時間復雜度O(n)(兩次遍歷數組,每次 O(n),合并遍歷 O(n))。
  • 空間復雜度O(n)(存儲 leftright 數組,可優化為 O(1),但代碼可讀性降低)。

該方法通過 兩次貪心遍歷拆分雙向約束,將復雜的雙向問題轉化為兩個單向問題,再合并求解,確保了效率和可讀性的平衡,是處理此類“雙向約束”問題的經典思路。

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

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

相關文章

【QT】安裝與配置

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;QT 文章目錄1. QT簡介與準備工作1.1 什么是QT1.2 QT的版本選擇1.3 系統要求檢查2. QT安裝方式詳解2.1 官方在線安裝器2.2 離線安裝包2.3 包管理器安裝3. Windows平臺安裝配置3.1 Windows安裝步驟3.2 環境變量配置3.3 Visual Stu…

Java從入門到精通 - 算法、正則、異常

算法、正則、異常 此筆記參考黑馬教程&#xff0c;僅學習使用&#xff0c;如有侵權&#xff0c;聯系必刪 文章目錄算法、正則、異常1. 常見算法1.1 簡單認識算法1.1.1 什么是算法&#xff1f;1.1.2 為什么要學習算法&#xff1f;1.2 排序算法1.2.1 冒泡排序1.2.1.1 實現冒泡排…

題單【排序】

P1271 【深基9.例1】選舉學生會 P1271 【深基9.例1】選舉學生會 - 洛谷 【方法一】快速排序 使用sort()&#xff0c;注意數組的范圍&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std;int a[2000000],n,m;int main() {cin>>n>&g…

【機器學習】(算法優化二)提升算法之:AdaBoost與隨機梯度

文章目錄一、 AdaBoost&#xff1a;自適應提升算法1、AdaBoost數學原理詳解1.1、 目標函數1.2、 樣本權重更新的邏輯1.3、 模型權重計算的含義1.4、 AdaBoost的核心思想2、為什么AdaBoost如此有效&#xff1f;二、 隨機梯度提升算法&#xff1a;梯度優化下更精細的優化1、隨機梯…

力扣 hot100 Day65

75. 顏色分類 給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums &#xff0c;原地 對它們進行排序&#xff0c;使得相同顏色的元素相鄰&#xff0c;并按照紅色、白色、藍色順序排列。 我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 必須在不使用庫內置的 sort 函…

12.Linux 磁盤管理

Linux : 磁盤管理 一、磁盤設備命名規則磁盤類型設備命名模式示例特點SATA/SCSI/SAS/dev/sdXsda&#xff08;第一塊硬盤&#xff09; sda1&#xff08;第一塊硬盤第一分區&#xff09;機械硬盤/通用接口NVMe/dev/nvmeXnYpZnvme0n1&#xff08;第一通道第一塊盤&#xff09; …

《Linux服務與安全管理》| DHCP服務器安裝和配置

《Linux服務與安全管理》| DHCP服務器安裝和配置 目錄 《Linux服務與安全管理》| DHCP服務器安裝和配置 一、點擊“編輯虛擬機設置”&#xff0c;配置三臺虛擬機為“僅主機”模式。 二、server01開機&#xff0c;root用戶登錄&#xff0c;輸入nmtui&#xff0c;進入圖形界面…

賽博威攜手Dify,助力AI在企業的場景化落地

人工智能正以前所未有的速度重塑商業世界。我們經歷了從理論探索到大語言模型&#xff08;LLM&#xff09;的爆發式增長&#xff0c;如今&#xff0c;一個以“AI Agent&#xff08;智能體&#xff09;”為核心的新階段已然來臨。AI Agent代表了人工智能應用的未來形態。它不再被…

嵌入式硬件中三極管推挽電路控制與實現

我們昨天講到了這個電路。 如果 A 電是 PWM 波,那么請問 B 點是不是 PWM 波呢?那么,當 PWM 為高時, B 點的電流是從哪里流過來的?

數據結構——查找(三、樹形查找)

一、二叉排序樹&#xff08;BST&#xff09;1、二叉排序樹的定義構造一棵二叉排序樹的目的并不是排序&#xff0c;而是提高查找、插入和刪除關鍵字的速度二叉排序樹&#xff08;也稱二叉搜索樹&#xff09;或者是一顆空樹&#xff0c;或者是具有以下性質的二叉樹1、若左子樹非空…

八股——Kafka相關

文章目錄1、 消息隊列的作用什么&#xff1f;思&#xff1a;消息隊列是什么?消息隊列的定義消息隊列的工作原理消息隊列的作用消息隊列的常見類型消息隊列的簡單例子2、Kafka 集群的架構是什么樣子的&#xff1f;3、Kafka 消費者組和生產者組是什么&#xff1f;定義與核心作用…

墨者學院SQL手工注入漏洞測試(MySQL數據庫)題目,純手工注入教程

打開練習手工注入的靶場,發現此時為一個登錄頁面,我們先試著登錄看看注入點在不在登錄頁面 使用用戶:or 1=1# 密碼:admin123;嘗試登錄,發現顯示錯誤后直接彈回原頁面,無sql報錯相關語句,這里不存在sql注入點 一:判斷注入點以及猜測是否有注入 此時點擊這里的動態頁面…

[硬件電路-140]:模擬電路 - 信號處理電路 - 鎖定放大器概述、工作原理、常見芯片、管腳定義

一、鎖定放大器概述鎖定放大器&#xff08;Lock-in Amplifier&#xff09;是一種基于相干檢測技術的高靈敏度測量儀器&#xff0c;通過將待測信號與參考信號進行同步處理&#xff0c;從強噪聲中提取微弱信號并精確測量其振幅與相位。其核心優勢包括&#xff1a;信噪比提升&…

下載 | Windows Server 2025官方原版ISO映像!(7月更新、標準版、數據中心版、26100.4652)

? 資源A066_Windows_Server_2025系統映像&#x1f536; Windows Server 2025官方原版ISO映像&#xff0c;7月更新版已放出。提供來自微軟官方每月更新的ISO原版映像&#xff0c;內部包含了標準版和數據中心版&#xff0c;可選擇無GUI界面版或桌面體驗版&#xff0c;滿足不同部…

Go 語言模糊測試 (Fuzz Testing) 深度解析與實踐

學習一個知識&#xff0c;要先了解它的來源 1. 模糊測試的誕生&#xff1a;Barton Miller 的故事 “Fuzz”一詞起源于1988年&#xff0c;由威斯康星大學麥迪遜分校的Barton Miller教授及其研究生團隊在一個高級操作系統課程項目中提出 。這個概念的誕生頗具戲劇性。Miller教授在…

【軟考和軟著】

一、&#x1f4ab; 杭州E類人才政策 在這里插入圖片描述 二、人才認定標準 三、關于軟考 1、什么是軟考&#xff1f; 軟考指的是“計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試”。計算機軟件資格考試是由國家人力資源和社會保障部、工業和信息化部領導下…

「源力覺醒 創作者計劃」開源大模型重構數智文明新范式

起來輕松玩轉文心大模型吧一文心大模型免費下載地址&#xff1a;https://ai.gitcode.com/paddlepaddle/ERNIE-4.5-VL-424B-A47B-Paddle開源大模型的崛起與AI幻覺挑戰&#xff1a;中國AI發展的雙重使命 ——從技術追趕到生態引領的跨越之路一、開源大模型&#xff1a;重構數智文…

政務云數智化轉型:靈雀云打造核心技術支撐能力

政務云數智化轉型進行時&#xff0c;亟需體系升級政務信息化作為政府治理與服務的重要支撐&#xff0c;業務呈現出政策性強、數據敏感度高、系統復雜度高、服務連續性要求嚴等特點&#xff0c;對IT系統提出了極高要求&#xff1a;不僅需支撐高并發、高可用的政務應用&#xff0…

軟件測試自學之路

別找了&#xff01;2025B站最全最細的軟件測試教程&#xff0c;7天從零基礎小白到精通軟件測試&#xff0c;學完即上崗&#xff01;自學軟件測試對于小白來說還是有一定的難度&#xff0c;各種專業術語的不熟悉&#xff0c;各種電腦操作的不熟悉&#xff0c;有時候要安裝一個學…

備案期間老網站有什么要求

老網站的內容必須符合法律法規和互聯網管理規定。這可不是開玩笑的事兒&#xff0c;相關部門對于網站內容的審核可是相當嚴格的。比如說&#xff0c;不能有違法犯罪、色情低俗、虛假信息等不良內容。根據互聯網信息管理專家的建議&#xff0c;網站內容應該積極健康、真實準確。…