力扣網編程135題:分發糖果(貪心算法)

一. 簡介

本文記錄力扣網上涉及數組方面的編程題:分發糖果。

這里使用貪心算法的思路來解決(求局部最優,最終求全局最優解):每個孩子只需要考慮與相鄰孩子的相對關系。

二.?力扣網編程135題:分發糖果(遍歷兩遍數組)

n 個孩子站成一排。給你一個整數數組 ratings 表示每個孩子的評分。
你需要按照以下要求,給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
相鄰兩個孩子評分更高的孩子會獲得更多的糖果。
請你給每個孩子分發糖果,計算并返回需要準備的 最少糖果數目 。

示例 1:
輸入:ratings = [1,0,2]
輸出:5
解釋:你可以分別給第一個、第二個、第三個孩子分發 2、1、2 顆糖果。

示例 2:
輸入:ratings = [1,2,2]
輸出:4
解釋:你可以分別給第一個、第二個、第三個孩子分發 1、2、1 顆糖果。
第三個孩子只得到 1 顆糖果,這滿足題面中的兩個條件。

解題思路一:(遍歷兩遍數組)

我們可以將「相鄰的孩子中,評分高的孩子必須獲得更多的糖果」這句話拆分為兩個規則,分別處理:

左規則:ratings[i-1] < ratings[i],i號孩子的糖果比 i-1號孩子的糖果數量多;

右規則:ratings[i] > ratings[i+1],i號孩子比 i+1號孩子的糖果數量少;

遍歷該數組兩次,處理出每一個學生分別滿足左規則或右規則時,最少需要被分得的糖果數量。每個人最終分得的糖果數量即為這兩個數量的最大值。

具體方法如下:

1. 定義一個數組left[ratingsSize],用于存放滿足左規則的糖果數目;變量 right 存放滿足右規則的糖果數目;

1. 滿足左規則:從前往后遍歷數組,若 ratings[i-1] < ratings[i],則 left[i] = left[i-1] +1,否則,left[i] = 1;

2. 滿足右規則:類似處理,不過是從后往前進行遍歷。

若 ratings[i] > ratings[i+1],則 right += 1,否則,right =1。在遍歷過程中,求 滿足左規則和右規則的糖果數目進行比較,求最大值,同時進行累計。

C語言實現如下:

//遍歷兩次數組,滿足條件
//1.左規則:ratings[i-1] < ratings[i], 則ratings[i]=ratings[i-1]+1
//2.右規則:ratings[i] > ratings[i+1],則ratings[i]= ratings[i+1]+1
int candy(int* ratings, int ratingsSize) {int i;int count = 0;int left[ratingsSize];//從前往后遍歷//左規則:ratings[i-1] < ratings[i], 則ratings[i]=ratings[i-1]+1for(i = 0; i < ratingsSize; i++) {if((i>0) && (ratings[i-1] < ratings[i])) {left[i] = left[i-1]+1;}else {left[i] = 1;}}int right = 0;//從后往前遍歷//右規則:ratings[i] > ratings[i+1],則ratings[i]= ratings[i+1]+1for(i = ratingsSize-1; i >= 0; i--) {if((i < ratingsSize-1) && (ratings[i] > ratings[i+1])) {right += 1;} else {right = 1;}count += fmax(left[i], right);} return count;
}

可以看出,貪心算法的解法的時間復雜度為 O(n),空間負責度為O(n)。

第二種實現如下,也是同樣的思路(貪心算法):


//貪心算法:
//局部最優:每個孩子只需要關心和她相鄰的關系
int candy(int* ratings, int ratingsSize) {int i;int candies[ratingsSize];int right = 0;int count = 0;memset(candies, 0, ratingsSize*sizeof(int));for(i = 0; i < ratingsSize; i++) {candies[i] = 1;}//遵循左規則:從左到右遍歷//如果 ratings[i-1] < ratings[i]for(i = 0; i < ratingsSize; i++) {if((i>0) && (ratings[i-1] < ratings[i])) {candies[i] = candies[i-1] + 1;}}//遵循右規則:從右向左遍歷//如果 ratings[i] > ratings[i+1]for(i = ratingsSize-1; i>=0; i--) {if((i<ratingsSize-1) && (ratings[i] > ratings[i+1])) {right += 1;}else {right = 1;}count += fmax(candies[i], right);}return count;
}

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

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

相關文章

每日mysql

什么是Mysql索引最左匹配原則&#xff1f;最左匹配原則是指&#xff0c;在復合索引中&#xff0c;查詢條件需要從左到右和索引開始依次完全匹配的時候&#xff0c;復合索引才可以被有效使用。因為聯合索引在建立b樹的過程中是根據索引的順序從左到右進行排序的&#xff0c;所以…

樹莓派5-ollama-linux-arm64.tgz 下載

1.下載 由于官方下載速度太慢且容易失敗&#xff0c;我這里上傳了一份到云盤供大家下載&#xff1a; 通過網盤分享的文件&#xff1a;ollama-linux-arm64.tgz 鏈接: https://pan.baidu.com/s/1tx_OPpl-8O2HJfXlP4tXTg?pwdffwx 提取碼: ffwx --來自百度網盤超級會員v4的分享 …

2024年團體程序設計天梯賽

比賽鏈接 https://ac.nowcoder.com/acm/contest/80027 A&#xff1a; JMU-1 考察搜索的能力百度一下可知&#xff0c;2024 年天梯賽總決賽的比賽日為4 月 20日 參考代碼 //2024 年天梯賽總決賽的比賽日為4 月 20日 void solve(){//A20-7cout<<"H\n"; } B&…

基于CMMI的軟件質量管理體系深度解析

核心理念&#xff1a;CMMI&#xff08;Capability Maturity Model Integration&#xff09;是通過過程改進驅動質量提升的體系化框架&#xff0c;其本質是建立可量化、可重復、可優化的工程管理能力一、CMMI體系框架與演進 #mermaid-svg-MdDBl2P8fSHYDHMc {font-family:"t…

2025年滲透測試面試題總結-2025年HW(護網面試) 44(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年HW(護網面試) 44 1. SQL注入常用函數 2. SQLMap爆當前庫名參數 3. Nmap探測系統參數 4. Nmap小寫 …

【操作系統-Day 5】通往內核的唯一橋梁:系統調用 (System Call)

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

完整 Spring Boot + Vue 登錄系統

項目名稱&#xff1a;springboot-vue-login-template? 功能一覽模塊功能后端Spring Boot MyBatis Plus JWT Shiro數據庫MySQL 用戶表前端Vue3 Element Plus Axios登錄流程用戶名/密碼驗證 → 返回 Token → 存儲 LocalStorage權限控制攔截器校驗 Token Shiro 角色權限跨…

Redis 基礎詳細介紹(Redis簡單介紹,命令行客戶端,Redis 命令,Java客戶端)

1. Redis 簡介Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據庫&#xff0c;遵守 BSD 協議&#xff0c;它提供了一個高性能的鍵值&#xff08;key-value&#xff09;存儲系統&#xff0c;常用于緩存、消息隊列、會話存儲等應用場景。1.1 特征豐富…

C/C++數據結構之多維數組

概述多維數組&#xff0c;實際上就是“數組的數組”。最常見的是二維數組&#xff0c;就像一個表格&#xff0c;擁有行和列。而三維數組則可以想象為多個這樣的表格堆疊起來形成的一個立方體。依此類推&#xff0c;我們可以構建四維、五維甚至更高維度的數組。多維數組主要用于…

[Rust 基礎課程]選一個合適的 Rust 編輯器

市面上現在有很多編輯器都可以開發 Rust&#xff0c;很多都是以安裝 Rust 插件的形式來對 Rust 做支持&#xff0c;本課程使用 RustRover&#xff0c;如果你喜歡其他的編輯器&#xff0c;可以自己搗鼓下。 RustRover https://www.jetbrains.com/rust/ jetbrains 專門對于 Ru…

【零基礎學AI】第37講:提示詞工程(Prompt Engineering)

本節課你將學到 理解提示詞工程的核心原理 掌握5種實用的Prompt設計模式 學會優化提示詞的評估方法 實現一個智能問答系統優化案例 開始之前 環境要求 Python 3.8安裝包&#xff1a;pip install openai tiktokenOpenAI API密鑰&#xff08;免費注冊&#xff1a;https://plat…

莫蘭迪色系工作總結匯報PPT模版分享

莫蘭迪色工作總結PPT模版&#xff0c;莫蘭迪調色板PPT模版&#xff0c;莫蘭迪色系高級簡約PPT模版&#xff0c;莫蘭迪色系工作匯報&#xff0c;莫蘭迪總結匯報模版 莫蘭迪色系工作總結匯報PPT模版分享&#xff1a;https://pan.quark.cn/s/35bcaa03c837

uniapp的app項目,某個頁面長時間無操作,返回首頁

最開始想做成一個公共的&#xff0c;完全提取出來的一個組件&#xff0c;組件設置背景透明&#xff0c;到時候哪個頁面需要&#xff0c;直接引入組件就可以了&#xff0c;所以最開始做的是一個vue的組件&#xff0c;在組件中&#xff0c;監聽頁面的touchstart&#xff0c;但是這…

【實證分析】上市公司綠色戰略數據集(2000-2023年)

數據簡介&#xff1a;綠色戰略是指企業根據其所處的外部環境&#xff08;包括“綠色浪潮”等環保趨勢&#xff09;和企業自身的經營條件&#xff0c;為實現企業生存與發展質量的持續提升&#xff0c;而對企業生產經營活動進行綠色化改造的總體規劃。這包括制定企業綠色可持續發…

【SpringAI】7. 基于 milvus 的向量檢索

SpringAI 基于 milvus 的向量檢索 向量數據庫可以使用 milvus&#xff0c;redis,Elasticsearch 等&#xff0c;本文以 milvus 為例&#xff1a; 1. 啟動milvus 為了盡可能快速上手springai的vectordb功能&#xff0c;我們推薦使用云上的milvus&#xff0c;注冊就能創建免費的…

如何使用數字化動態水印對教育視頻進行加密?

文章目錄前言一、什么是數字化動態水印二、使用數字化動態水印對教育視頻加密的好處&#xff1f;三、數字化動態水印的實現原理四、如何實現數字化動態水印對教育視頻加密總結前言 教育資源數字化蓬勃發展的今天&#xff0c;優質視頻課程已成為機構的核心知識資產。然而&#…

解決bash終端的路徑名稱亂碼問題

解決bash終端的路徑名稱亂碼 默認打開了zsh&#xff0c;當我輸入bash后&#xff0c;就出現了亂碼 (context_rag) [23fanyaohead1]~/mycode-thesis% bash (context_rag) [%n%m]%~%#亂碼原因排查 我遇到了終端亂碼問題&#xff0c;需要檢查當前的終端環境和編碼設置&#xff0c;下…

【深度學習】【入門】Sequential的使用和簡單神經網絡搭建

1.Sequential的概念它是一種按順序封裝神經網絡層的容器&#xff0c;能讓層按照添加順序依次執行計算&#xff0c;簡化網絡搭建流程2.Sequential的作用1.代碼簡潔化對比不用 Sequential 時手動搭建層的繁瑣代碼&#xff08;如每層需手動定義并連接&#xff09;&#xff0c;展示…

前端開發中的資源緩存詳解

資源緩存用于緩存靜態資源,良好的緩存策略可以減少資源重復加載進而提高網頁的整體加載速度。 通常瀏覽器緩存策略分為兩種:強緩存和協商緩存,當然還包括 service worker。 瀏覽器在資源加載時,根據請求頭中的 expires 和 cache-control 值來判斷是否命中強緩存,命中則直…

零基礎入門指南:華為數通認證體系詳解

一、華為數通認證的定位與行業價值華為數通認證&#xff08;Datacom&#xff09;是ICT領域核心方向&#xff0c;覆蓋路由器、交換機等網絡基礎設備技術&#xff0c;被譽為“網絡行業的骨骼”。2020年升級為Datacom認證體系&#xff0c;新增SDN、VXLAN、網絡自動化等前沿技術&am…