代碼隨想錄第二十七天 455.分發餅干 376.擺動序列 53.最大子序和 122.買賣股票的最佳時機II

LeetCode 455 分發餅干

題目描述

假設你是一位很棒的家長,想要給你的孩子們一些小餅干。但是,每個孩子最多只能給一塊餅干。

對每個孩子?i,都有一個胃口值?g[i],這是能讓孩子們滿足胃口的餅干的最小尺寸;并且每塊餅干?j,都有一個尺寸?s[j]?。如果?s[j]?>= g[i],我們可以將這個餅干?j?分配給孩子?i?,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,并輸出這個最大數值。

示例?1:

輸入: g = [1,2,3], s = [1,1]
輸出: 1
解釋: 
你有三個孩子和兩塊小餅干,3個孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅干,由于他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應該輸出1。

示例?2:

輸入: g = [1,2], s = [1,2,3]
輸出: 2
解釋: 
你有兩個孩子和三塊小餅干,2個孩子的胃口值分別是1,2。
你擁有的餅干數量和尺寸都足以讓所有孩子滿足。
所以你應該輸出2.

思路

????????這道題目可以先固定餅干的數量,然后找到能滿足的最大的小孩胃口,也可以先固定要滿足的小孩胃口,再找能滿足他胃口的最小餅干數量。這里我們選擇先從最大的胃口開始for循環遍歷,如果餅干數大于等于小孩的胃口,再遍歷下一個餅干,否則就一直找更小的胃口,直到胃口小于這個餅干數為止。

代碼實現

class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(),g.end());sort(s.begin(),s.end());int result = 0;int index = s.size() - 1;for(int i = g.size() - 1;i >= 0;i--){if(index >= 0 && s[index] >= g[i]){result++;index--;}}return result;}
};

LeetCode 376 擺動序列

題目描述

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為?擺動序列 。第一個差(如果存在的話)可能是正數或負數。僅有一個元素或者含兩個不等元素的序列也視作擺動序列。

  • 例如,?[1, 7, 4, 9, 2, 5]?是一個?擺動序列?,因為差值?(6, -3, 5, -7, 3)?是正負交替出現的。

  • 相反,[1, 4, 7, 2, 5]?和?[1, 7, 4, 5, 5]?不是擺動序列,第一個序列是因為它的前兩個差值都是正數,第二個序列是因為它的最后一個差值為零。

子序列?可以通過從原始序列中刪除一些(也可以不刪除)元素來獲得,剩下的元素保持其原始順序。

給你一個整數數組?nums?,返回?nums?中作為?擺動序列?的?最長子序列的長度?。

示例 1:

輸入:nums = [1,7,4,9,2,5]
輸出:6
解釋:整個序列均為擺動序列,各元素之間的差值為 (6, -3, 5, -7, 3) 。

示例 2:

輸入:nums = [1,17,5,10,13,15,10,5,16,8]
輸出:7
解釋:這個序列包含幾個長度為 7 擺動序列。
其中一個是 [1, 17, 10, 13, 10, 16, 8] ,各元素之間的差值為 (16, -7, 3, -3, 6, -8) 。

示例 3:

輸入:nums = [1,2,3,4,5,6,7,8,9]
輸出:2

思路

? ? ? ? 本題的基本思路是判斷與前一個數的結果<0,同時與后一個數相減的結果>0,或者反過來,就可以記錄一個峰值。

????????需要注意的細節一:如果前后的元素有平坡,這時候三個2中有一個需要記錄為峰值,但是左右兩邊始終有一邊的增長數量或者是減小數量為0,這時候就需要將判斷條件改為

nums[i] - nums[i - 1] <= 0 && nums[i + 1] - nums[i] > 0

或者

nums[i] - nums[i - 1] <= 0 && nums[i + 1] - nums[i] > 0

細節二:結尾默認記錄為一個峰值,同時開頭只要第二個數不和第一個數相等,就可以記錄為一個峰值。

細節三:單調有平坡的情況

例如[1,2,2,2,3,4],如圖:

圖中,我們可以看出按照先前的思路,會在2這個地方記錄一個峰值,因為 單調中的平坡 不能算峰值(即擺動)。所以為了避免這種情況,更新prediff的條件要有變化,只有curdiff有變化的時候,才更新prediff,如果curdiff一直是平坡,那么就不更新prediff。并且因為默認了最后一個數是一個峰值,所以curdiff = 0,prediff不等于0的情況不能記錄峰值。

代碼實現

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() <= 1) return nums.size();int prediff = 0;int result = 1;int curdiff = 0;for(int i = 0;i < nums.size() - 1;i++){curdiff = nums[i + 1] - nums[i];if(prediff <= 0 && curdiff > 0 || prediff >= 0 && curdiff < 0){result++;}if(curdiff != 0) prediff = curdiff;}return result;}
};

LeetCode 53 最大子序和

題目描述

給你一個整數數組?nums?,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

子數組是數組中的一個連續部分。

示例 1:

輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子數組?[4,-1,2,1] 的和最大,為?6 。

示例 2:

輸入:nums = [1]
輸出:1

示例 3:

輸入:nums = [5,4,-1,7,8]
輸出:23

思路

本題的思路是遍歷整個數組,當子序列的和小于0時,就重新開始加和,同時每遍歷一個數,如果子序列和,大于當前result中存放的數,都要更新result的值。

代碼實現

class Solution {
public:int maxSubArray(vector<int>& nums) {int sum = 0;int result = nums[0];for(int i = 0; i < nums.size();i++){sum += nums[i];if(sum > result) result = sum;if(sum < 0) sum = 0;}return result;}
};

LeetCode 122 買賣股票的最佳時機II

題目描述

給你一個整數數組?prices?,其中?prices[i]?表示某支股票第?i?天的價格。

在每一天,你可以決定是否購買和/或出售股票。你在任何時候?最多?只能持有?一股?股票。你也可以先購買,然后在?同一天?出售。

返回?你能獲得的?最大?利潤?。

示例 1:

輸入:prices = [7,1,5,3,6,4]
輸出:7
解釋:在第 2 天(股票價格 = 1)的時候買入,在第 3 天(股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。隨后,在第 4 天(股票價格 = 3)的時候買入,在第 5 天(股票價格 = 6)的時候賣出, 這筆交易所能獲得利潤 = 6 - 3 = 3 。總利潤為 4 + 3 = 7 。

示例 2:

輸入:prices = [1,2,3,4,5]
輸出:4
解釋:在第 1 天(股票價格 = 1)的時候買入,在第 5 天 (股票價格 = 5)的時候賣出, 這筆交易所能獲得利潤 = 5 - 1 = 4 。總利潤為 4 。

示例?3:

輸入:prices = [7,6,4,3,1]
輸出:0
解釋:在這種情況下, 交易無法獲得正利潤,所以不參與交易可以獲得最大利潤,最大利潤為 0 。

思路

這道題的思路可以簡化為和上一題類似的思路,算出每一個相鄰數的差值,只累加正數,就可以得到最大利潤。

假如第 0 天買入,第 3 天賣出,那么利潤為:prices[3] - prices[0]。

相當于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此時就是把利潤分解為每天為單位的維度,而不是從 0 天到第 3 天整體去考慮!

不管是哪一天購入,哪一天賣出,只要在賺了錢,將賺得的錢數累加起來,就可以得到最大的利潤。

代碼實現?

class Solution {
public:int maxProfit(vector<int>& prices) {int result = 0;for(int i = 1; i < prices.size();i++){if(prices[i] - prices[i - 1] > 0){result += prices[i] - prices[i - 1];}}return result;}
};

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

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

相關文章

2024全國護網行動HW行動招聘/收人!!!

2024全國護網行動HW行動招聘 溯蓉信創開始收人啦&#xff01;&#xff01;&#xff01;現在開始收錄2024HW簡歷&#xff0c;感興趣的小伙伴掃碼二維碼添加微信 我們簽約后&#xff0c;入場即預付款3k&#xff0c;簽約后我們會在HW之前對我們的人員進行HW培訓&#xff0c;保證上…

Three.js--》探尋Cannon.js構建震撼的3D物理交互體驗(一)

我們用three.js可以繪制出各種酷炫的畫面&#xff0c;但是當我們想要一個更加真實的物理效果的話&#xff0c;這個時候我們就需要一個物理的庫&#xff0c;接下來我們就講解一下今天要學習的canon&#xff0c;它可以給我們提供一個更加真實的物理效果&#xff0c;像物體的張力、…

YOLOv8姿態估計實戰:訓練自己的數據集

課程鏈接&#xff1a;https://edu.csdn.net/course/detail/39355 YOLOv8 基于先前 YOLO 版本的成功&#xff0c;引入了新功能和改進&#xff0c;進一步提升性能和靈活性。YOLOv8 同時支持目標檢測和姿態估計任務。 本課程以熊貓姿態估計為例&#xff0c;將手把手地教大家使用C…

Mysql實戰(2)之MySQL執行流程

-- 查看mysql當前有多少連接 show global status like Thread%; /* Threads_cached&#xff1a;緩存中的線程連接數 Threads_connected&#xff1a;當前打開的連接數 Threads_created&#xff1a;為處理連接創建的線程數 Threads_running&#xff1a;非睡眠狀態的連接數&…

windows部署mariadb-11.3

因為需要用到數據庫來處理一些東西,所以決定在windows上安裝一下MariaDB. 隨著版本升級,安裝已經不是那么復雜了.對應的.其實網上一大堆的檢索結果,很多并不可用. 由于是開發環境,這里一切從簡了. 下載安裝包.并解壓進入bin目錄,使用mysql_install_db.exe程序來進行安裝.執行 m…

MSCKF5講:后端代碼分析

MSCKF5講&#xff1a;后端代碼分析 文章目錄 MSCKF5講&#xff1a;后端代碼分析1 初始化initialize()1.1 加載參數1.2 初始化IMU連續噪聲協方差矩陣1.3 卡方檢驗1.4 接收與訂閱話題createRosIO() 2 IMU靜止初始化3 重置resetCallback()4 featureCallback4.1 IMU初始化判斷4.2 I…

【文末送書】智能計算:原理與實踐

歡迎關注博主 Mindtechnist 或加入【智能科技社區】一起學習和分享Linux、C、C、Python、Matlab&#xff0c;機器人運動控制、多機器人協作&#xff0c;智能優化算法&#xff0c;濾波估計、多傳感器信息融合&#xff0c;機器學習&#xff0c;人工智能等相關領域的知識和技術。關…

Linux系統運維腳本:一鍵添加防火墻規則(開啟服務和網絡端口)

目 錄 一、要求 二、解決方案 &#xff08;一&#xff09;解決思路 &#xff08;二&#xff09;方案 三、腳本程序實現 &#xff08;一&#xff09;腳本代碼和解釋 1、腳本代碼 2、代碼解釋 &#xff08;二&#xff09;腳本驗證 1、腳本編輯 2、給予執行權限…

NumPy數據處理詳解的筆記2

NumPy數據處理詳解的筆記2 第1章NumPy基礎 NumPy是用于處理多維數組的數值運算庫&#xff0c;不僅可用于 機器學習&#xff0c;還可以用于圖像處理&#xff0c;語言處理等任務。 1.2 多維數據結構ndarray的基礎 在學習NumPy的過程中&#xff0c;只要理解了ndarray的相關知識…

java 關于 Object 類中的 wait 和 notify 方法。(生產者和消費者模式!)

4、關于 Object 類中的 wait 和 notify 方法。&#xff08;生產者和消費者模式&#xff01;&#xff09; 第一&#xff1a;wait 和 notify 方法不是線程對象的方法&#xff0c;是 java 中任何一個 java 對象都有的方法&#xff0c;因為這兩個方法是 Object 類中自帶的。 wait 方…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的停車位檢測系統(Python+PySide6界面+訓練代碼)

摘要&#xff1a;開發停車位檢測系統對于優化停車資源管理和提升用戶體驗至關重要。本篇博客詳細介紹了如何利用深度學習構建一個停車位檢測系統&#xff0c;并提供了完整的實現代碼。該系統基于強大的YOLOv8算法&#xff0c;并結合了YOLOv7、YOLOv6、YOLOv5的性能對比&#xf…

HarmonyOS端云體化開發—創建端云一體化開發工程

云開發工程模板 DevEco Studio目前提供了兩種云開發工程模板&#xff1a;通用云開發模板和商城模板。您可根據工程向導輕松創建端云一體化開發工程&#xff0c;并自動生成對應的代碼和資源模板。在創建端云一體化開發工程前&#xff0c;請提前了解云開發工程模板的相關信息。 …

前端學習之HTML(第一天)

什么是HTML HTML是一種用來描述網頁的一種語言&#xff0c;HTML不是一種編程語言&#xff0c;而是一種標記語言。 HTML標簽 HTML 標簽是由尖括號包圍的關鍵詞&#xff0c;比如 <html> HTML 標簽通常是成對出現的&#xff0c;比如 <b> 和 </b> 標簽對中的…

ROS 2基礎概念#3:主題(Topic)| ROS 2學習筆記

在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;主題&#xff08;Topics&#xff09;是實現節點之間通信的主要機制之一。節點&#xff08;Node&#xff09;可以發布&#xff08;publish&#xff09;消息到話題&#xff0c;或者訂閱&#xff08;subscribe&…

市場復盤總結 20240304

僅用于記錄當天的市場情況&#xff0c;用于統計交易策略的適用情況&#xff0c;以便程序回測 短線核心&#xff1a;不參與任何級別的調整&#xff0c;采用龍空龍模式 一支股票 10%的時候可以操作&#xff0c; 90%的時間適合空倉等待 二進三&#xff1a; 進級率中 20% 最常用的…

格兩例12345

osu/Lucky Roll gaming 周末osu有道題&#xff1a;lcg已知低位 def lcg(s, a, b, p):return (a * s b) % pp getPrime(floor(72.7)) a randrange(0, p) b randrange(0, p) seed randrange(0, p) print(f"{p }") print(f"{a }") print(f"{b …

冪等性設計

目錄 前言 冪等性設計 冪等性設計處理流程 HTTP 冪等性 消息隊列冪等性 基于kafka 前言 冪等性設計&#xff0c;就是說&#xff0c;一次和多次請求某一個資源應該具有同樣的副作用。為什么我們要有冪等性操作&#xff1f;說白了&#xff0c;就兩點&#xff1a;1、網絡的…

LeetCode第125場雙周賽個人題解

目錄 100231. 超過閾值的最少操作數 I 原題鏈接 思路分析 AC代碼 100232. 超過閾值的最少操作數 II 原題鏈接 思路分析 AC代碼 100226. 在帶權樹網絡中統計可連接服務器對數目 原題鏈接 思路分析 AC代碼 100210. 最大節點價值之和 原題鏈接 思路分析 AC代碼 10023…

大話C++之:對象內存模型

一般繼承(無虛函數覆蓋) 只有一個虛指針&#xff0c;指向一個虛表&#xff0c;虛函數按順序從祖先節點開始插入到虛表上。字段按順序從祖先節點開始插入到對象內存上 一般繼承(有虛函數覆蓋) 只有一個虛指針&#xff0c;指向一個虛表&#xff0c;虛函數按順序從祖先節點開始&a…

桂院校園導航 靜態項目 二次開發教程 2.0

Gitee代碼倉庫&#xff1a;桂院校園導航小程序 GitHub代碼倉庫&#xff1a;GLU-Campus-Guide 靜態項目 2.0版本 升級日志 序號 板塊 詳情 1 首頁 重做了首頁&#xff0c;界面更加高效和美觀 2 校園頁 新增了 “校園指南” 功能&#xff0c;可以搜索和瀏覽校園生活指南…