代碼隨想錄算法訓練營:29/60

非科班學習算法day29 | LeetCode134:加油站 ,Leetcode135:分發糖果 ,Leetcode860:檸檬水找零?


介紹

包含LC的兩道題目,還有相應概念的補充。

相關圖解和更多版本:

代碼隨想錄 (programmercarl.com)https://programmercarl.com/#%E6%9C%AC%E7%AB%99%E8%83%8C%E6%99%AF


??

一、LeetCode題目

1.LeetCode134:加油站?

題目鏈接:134. 加油站 - 力扣(LeetCode)

題目解析

? ? ? ?這里很容易被示例的做法干擾,實際上,我們需要的就是別對兩個數組,到達一個位置(i)對應的需要加上gas(i)減去cost(i),這就我們需要比對的。這里先說一種之前有局限性的思路,先對兩個數組相減,構造新的數組,如果數組元素為負數表示到達不了下一位,那么繼續遍歷,找到第一個不為負數的位置為初始位置,并且控制總和為負數的話返回-1,這樣的做法最大的問題就在于我沒有意識到,加油的過程也是需要一個初始量累計的,所以我不能單純比較一個位置為負數就跳過這個位置,而應該是用cur變量維護start的位置,如果cur在累加的過程中變為負數,那么就重置cur并且將返回的start向后加一位。

?c++代碼如下:

class Solution {
public://gas是加的,cost是減的//建立差值數組,如果數組和是負數,那么不可能有解,如果大于等于則有唯一解int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int tolsum = 0;int cursum = 0;int start = 0;vector<int> nd = vector<int>(gas.size(),0);for(int i = 0; i<gas.size();i++){nd[i] = gas[i] - cost[i];tolsum+=nd[i];cursum+=nd[i];if(cursum<0){start = i+1;cursum = 0;}}if(tolsum<0) return -1;return start;}
};

注意點1:這里可能會疑惑start超出最后一位怎么辦,實際上,當cur超出最后一位的時候,并沒有影響,不會訪問空指針;而且關于最后的返回有tolsum控制,如果start超出,直接就返回-1了。注意!這里整個循環已經完成了一輪遍歷,只不過遍歷是從頭到尾的。

?2.Leetcode135:分發糖果?

題目鏈接:135. 分發糖果 - 力扣(LeetCode)

題目解析

? ? ? ?第一次做就是中了圈套,總想一次就確定好糖果的數量,這就導致條件特別多,很容易混亂,這里就使用了一種非常常用的方法,兩個方向分別遍歷,去比較一個元素的左邊和右邊元素的關系,同時維護糖果數組,這樣就可以實時更正。

? ? ? ? 這里有一個問題就是為什么需要兩個方向,因為在比較右邊元素的時候,和左邊一樣,有一個累計的過程,如果從左邊遍歷比較右邊的元素,就沒法實時更新下一個元素的信息。

?C++代碼如下:?

class Solution {
public:// 不能顧此失彼,分為兩邊去比對孩子int candy(vector<int>& ratings) {// 創建需要維護的糖果數組vector<int> candys = vector<int>(ratings.size(), 1);// 想象排隊過程,先和左邊的孩子比是大是小for (int i = 1; i < ratings.size(); ++i) {// 維護數組// 左邊小-加糖果if (ratings[i] > ratings[i - 1]) {candys[i] = candys[i - 1] + 1;}// 左邊大-重置糖果else {candys[i] = 1;}}// 比對右邊孩子是大是小for (int i = ratings.size() - 2; i >= 0; --i) {// 在之前的基礎上維護數組// 右邊小-加糖果if (ratings[i + 1] < ratings[i]) {candys[i] = max(candys[i], candys[i + 1] + 1);}// 右邊大-無需操作}// 累計糖果int sum = 0;for (int i = 0; i < candys.size(); ++i) {sum += candys[i];}return sum;}
};

注意點1:這里初始化,將糖果數組全部初始化為1,因為題目要求孩子的最少糖果數是1。所以在左邊遍歷的過程中,遇到需要重置的糖果,也可以不寫這個命令,因為已經做好了初始化。

注意點2:第二遍為什么右邊大不需要維護數組,可以舉一個數組作為例子,當前其實也是重置了糖果數量為1,但是要和之前的糖果數取一個大值,那么不就是當前的糖果數么,所以不需要處理。?

3.Leetcode860:檸檬水找零

題目鏈接:860. 檸檬水找零 - 力扣(LeetCode)

題目解析

? ? ? ?終于在貪心遇到一道爽題,這道題其實也就是模擬生活中找零的行為,但是需要注意的就是可能找不開零!那么我們的貪心策略就是盡可能找大的零(10)把靈活的5留著去找10的零,或者沒有10的時候去找20的零。策略有了,就需要變量維護當前的錢的數量,這里沒有維護20,因為20并不用于找零,只是作為判斷條件來做找零行為。

C++代碼如下:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int m5 = 0;int m10 = 0;for (int i = 0; i < bills.size(); ++i) {if (bills[i] == 5)m5++;if (bills[i] == 10) {m10++;m5--;}if (bills[i] == 20) {if (m10 == 0) {m5 -= 3;} else {m10--;m5--;}}if (m5 < 0)return false;}return true;}
};

總結


打卡第29天,堅持!!!

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

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

相關文章

IT專業高考假期入門指南

IT領域預習指南&#xff1a;開啟未來科技之旅 一、確定興趣方向 IT領域廣闊&#xff0c;涵蓋軟件開發、網絡安全、數據分析、人工智能等多個方向。首先&#xff0c;明確自己的興趣所在&#xff0c;這將決定你后續學習的重點。比如&#xff0c;如果你對構建應用程序感興趣&…

【1.3】動態規劃-解碼方法

一、題目 一條包含字母A-Z的消息通過以下映射進行了編碼&#xff1a; A -> 1 B -> 2 ... Z -> 26 要解碼已編碼的消息&#xff0c;所有數字必須基于上述映射的方法&#xff0c;反向映射回字母&…

新能源汽車充電站遠程監控系統S275鋇錸技術無線RTU

新能源汽車充電站的遠程監控系統在現代城市基礎設施中扮演著至關重要的角色&#xff0c;而鋇錸技術的S275無線RTU作為一款先進的物聯網數據監測采集控制短信報警終端&#xff0c;為充電站的安全運行和高效管理提供了強大的技術支持。 技術特點和功能 鋇錸S275采用了基于UCOSI…

Android11 窗口動畫

窗口進入動畫 應用端窗口繪制完成之后&#xff0c;調用finshDraw告知WMS&#xff0c;WMS這邊最后就會調用WindowSurfacePlacer的performSurfacePlacement方法&#xff0c;最終調用到 WindowStateAnimator的commitFinishDrawingLocked方法 //frameworks/base/services/core/jav…

JS進階-深入對象

學習目標&#xff1a; 掌握深入對象 學習內容&#xff1a; 創建對象三種方式構造函數實例成員&靜態成員 創建對象三種方式&#xff1a; 利用對象字面量創建對象 const o {name: 佩奇}利用new Object創建對象 const obj new Object({ uname: 雪碧寶寶 })console.log(obj…

OJhelper一款幫助你獲取各大oj信息的軟件

項目地址 應用功能 目前應用支持&#xff1a;查詢、自定義、收藏各大oj比賽信息&#xff0c;跳轉比賽界面。查詢各大oj的Rating分以及題量&#xff0c;查看題量餅狀圖。 應用環境 windows和安卓端 應用預覽&#xff1a; 維護概況 后期會提供持續更新&#xff0c;具體可以…

7.9數據結構

思維導圖 作業 doubleloop.h #ifndef __DOUBLELOOP_H__ #define __DOUBLELOOP_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct node {union{int len;datatype data;};struct node *pri;//前驅指針struct node *next;//后繼指針…

全終端自動化測試框架wyTest

突然有一些覺悟&#xff0c;程序猿不能只會吭哧吭哧的低頭做事&#xff0c;應該學會怎么去展示自己&#xff0c;怎么去宣傳自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;這兩天一直在整理自己的作品&#xff0c;也為接下來的找工作多做點準備。接下來…

Linux | 安裝lb-toolkits 1.2.4庫

Linux | 安裝 lb-toolkits 最近又需要下載葵花的數據&#xff0c;之前分享過一次代碼。今天發現之前的環境不小心被我刪了&#xff0c;而運行相關的代碼需要安裝lb-toolkits這個庫&#xff0c;今天正好記錄了一下安裝lb-toolkits的過程。 這里安裝的版本是1.2.4&#xff0c;別…

windows USB 設備驅動開發-發送MDL和錯誤恢復

USB 驅動程序可以在堆棧中使用鏈接式 MDL 功能發送數據&#xff0c;并且USB驅動的客戶端可以將傳輸緩沖區作為 MDL 結構鏈發送。 大多數 USB 主機控制器要求傳輸緩沖區幾乎是連續的。 幾乎連續意味著緩沖區可以開始和結束頁中的任意位置&#xff0c;但緩沖區的其余部分必須在頁…

53-4 內網代理6 - frp搭建三層代理

前提:53-3 內網代理5 - frp搭建二級代理-CSDN博客 三級網絡代理 在辦公區入侵后,發現需要進一步滲透核心區網絡(192.168.60.0/24),并登錄域控制器的遠程桌面。使用FRP在EDMZ區、辦公區與核心區之間建立三級網絡的SOCKS5代理,以便訪問核心區的域控制器。 VPS上的FRP服…

海豚調度器(DolphinScheduler)修改時區為東八區

海豚調度器設置了定時&#xff0c;執行的時間和設置時間不同&#xff0c;后來排查發現是時區問題。可以用下面方法和步驟來修改&#xff1a; 修改DolphinScheduler服務器時區 登錄服務器&#xff1a;首先&#xff0c;通過SSH或其他方式登錄到運行DolphinScheduler服務的服務器…

壓縮感知3——重構算法正交匹配追蹤算法

算法流程 問題的實質是&#xff1a;AX Y 求解&#xff08;A是M維&#xff0c;Y是N維且N>>M并且稀疏度K<M&#xff09;明顯X有無窮多解&#xff0c;重構過程是M次采樣得到的采樣值升維的過程。OMP算法的具體步驟&#xff1a;(1)用X表示信號&#xff0c;初始化殘差e0 …

計算給定數字的階乘

1 問題 計算給定數字的階乘. 2 方法 使用while循環。使用for循環。使用函數。 通過實驗、實踐等證明提出的方法是有效的&#xff0c;是能夠解決開頭提出的問題。 代碼清單 1 使用while循環numberint(input(請輸入一個數字:))factorial1i1while i<number: factorialfactor…

【論文速讀】| JADE:用于大語言模型的基于語言學的安全評估平臺

本次分享論文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者單位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 關鍵…

AWS Glue 與 Amazon Redshift 的安全通信配置

1. 引言 在 AWS 環境中,確保服務間的安全通信至關重要。本文將探討 AWS Glue 與 Amazon Redshift 之間的安全通信配置,特別是為什么需要特定的安全組設置,以及如何正確實施這些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、轉換、加載)服務Amazon Redshift:快速、完全…

嵌入式底層開發 入門學習路線

入門嵌入式底層開發的學習路線可以分為幾個關鍵階段&#xff0c;下面是一個較為系統的學習路徑&#xff0c;它涵蓋了從基礎知識到實際項目應用的全過程。 1. 基礎知識 計算機科學基礎&#xff1a;理解數據結構、算法、操作系統等基本概念。電子和電路理論&#xff1a;學習數字…

『大模型筆記』GraphRAG:用于復雜數據發現的新工具現已在GitHub上發布

GraphRAG:用于復雜數據發現的新工具現已在GitHub上發布 文章目錄 一. GraphRAG:用于復雜數據發現的新工具現已在GitHub上發布1. 評估和結果2. 研究見解和未來方向二. 參考文獻一. GraphRAG:用于復雜數據發現的新工具現已在GitHub上發布 下載 GraphRAG今年早些時候,我們介紹…

倒計時 2 周!CommunityOverCode Asia 2024 IoT Community 專題部分

CommunityOverCode 是 Apache 軟件基金會&#xff08;ASF&#xff09;的官方全球系列大會&#xff0c;其前身為 ApacheCon。自 1998 年以來&#xff0c;在 ASF 成立之前&#xff0c;ApacheCon 已經吸引了各個層次的參與者&#xff0c;在 300 多個 Apache 項目及其不同的社區中探…

【Unix】SunOS/Oracle Solaris系統介紹

一.SunOS系統介紹 SunOS 是由 Sun Microsystems 開發的 Unix 操作系統。它最初是為 Sun 的 SPARC 架構計算機設計的&#xff0c;后來也支持了 Intel x86 架構。SunOS 是基于 UNIX System V 4.1 版本&#xff0c;并且隨著時間的發展&#xff0c;SunOS 經歷了多個版本迭代&#…