【leetcode題解C++】121.買賣股票的最佳時機 and 122.買賣股票的最佳時機II and 55.跳躍游戲 and 45.跳躍游戲II

121. 買賣股票的最佳時機

給定一個數組?prices?,它的第?i?個元素?prices[i]?表示一支給定股票第?i?天的價格。

你只能選擇?某一天?買入這只股票,并選擇在?未來的某一個不同的日子?賣出該股票。設計一個算法來計算你所能獲取的最大利潤。

返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回?0?。

示例 1:

輸入:[7,1,5,3,6,4]
輸出:5
解釋:在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。注意利潤不能是 7-1 = 6, 因為賣出價格需要大于買入價格;同時,你不能在買入前賣出股票。

示例 2:

輸入:prices = [7,6,4,3,1]
輸出:0
解釋:在這種情況下, 沒有交易完成, 所以最大利潤為 0。

思路:由于只能買入賣出各一次,使用max來記錄盈利profit就好了。一開始先用一個超出題目給出范圍的很大的數來表示不買入(Java中有BigInteger這個類)。

代碼實現:

class Solution {
public:int maxProfit(vector<int>& prices) {int in = 100000;int profit = 0;for(const int& out : prices) {profit = max(out - in, profit);in = min(in, out);}return profit > 0 ? profit : 0;}
};

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 。

思路:在最后一天股票收盤之前,都可以交易,中間也可以多次交易。所以,只收集正利潤的交易即可。

代碼實現:

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

55. 跳躍游戲

給你一個非負整數數組?nums?,你最初位于數組的?第一個下標?。數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最后一個下標,如果可以,返回?true?;否則,返回?false?。

示例?1:

輸入:nums = [2,3,1,1,4]
輸出:true
解釋:可以先跳 1 步,從下標 0 到達下標 1, 然后再從下標 1 跳 3 步到達最后一個下標。

示例?2:

輸入:nums = [3,2,1,0,4]
輸出:false
解釋:無論怎樣,總會到達下標為 3 的位置。但該下標的最大跳躍長度是 0 , 所以永遠不可能到達最后一個下標。

思路:每次總是在局部最優的范圍內找下一個局部最優,最后判定是否能夠跳到最后一個下標。

代碼實現:

class Solution {
public:bool canJump(vector<int>& nums) {if(nums.size() == 1) return true;int cover = 0;for(int i = 0; i <= cover; ++i) {cover = max(cover, i + nums[i]);if(cover >= nums.size() - 1) return true;}return false;}
};

45. 跳躍游戲II

給定一個長度為?n?的?0 索引整數數組?nums。初始位置為?nums[0]

每個元素?nums[i]?表示從索引?i?向前跳轉的最大長度。換句話說,如果你在?nums[i]?處,你可以跳轉到任意?nums[i + j]?處:

  • 0 <= j <= nums[i]?
  • i + j < n

返回到達?nums[n - 1]?的最小跳躍次數。生成的測試用例可以到達?nums[n - 1]

示例 1:

輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳?1 步,然后跳?3
步到達數組的最后一個位置。

示例 2:

輸入: nums = [2,3,0,1,4]
輸出: 2

思路:題目告訴我們所有的情況都是可以跳到最后一個下標的,只需要我們判斷怎樣的跳數最少,那么,依舊需要一個當前下標能跳到的最遠距離,并用一個nextIndex來記錄在當前范圍內能夠跳得最遠的下一個下標(下次就跳過去),每當到達當前范圍的邊界,return值(跳數)就需要加一了。

代碼實現:

class Solution {
public:int jump(vector<int>& nums) {int curIndex = 0;int ret = 0;int nextIndex = 0;for(int i = 0; i < nums.size() - 1; ++i) {nextIndex = max(i + nums[i], nextIndex);if(curIndex == i) {curIndex = nextIndex;++ret;}}return ret;}
};

1005. K次取反后最大化的數組和

給你一個整數數組?nums?和一個整數?k?,按以下方法修改該數組:選擇某個下標?i?并將?nums[i]?替換為?-nums[i]?。

重復這個過程恰好?k?次。可以多次選擇同一個下標?i?。以這種方式修改數組后,返回數組?可能的最大和?。

示例 1:

輸入:nums = [4,2,3], k = 1
輸出:5
解釋:選擇下標 1 ,nums 變為 [4,-2,3] 。

示例 2:

輸入:nums = [3,-1,0,2], k = 3
輸出:6
解釋:選擇下標 (1, 2, 2) ,nums 變為 [3,1,0,2] 。

示例 3:

輸入:nums = [2,-3,-1,5,-4], k = 2
輸出:13
解釋:選擇下標 (1, 4) ,nums 變為 [2,3,-1,5,4] 。

思路:因為一個數字可以重復用來取反,那么我們的解題思路就是盡可能把所有的負數都取反成為正數。要想實現這個,可以首先用sort對所有數的絕對值排序(因為不用返回下標),再通過遍歷來維護每一個數,當所有的負數都被取反為之后,就需要對絕對值最小的數取反了(以確保減去的數是最小的)。sort的規則(函數)寫成一個單獨的函數或者lambda表達式均可。

代碼實現:

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int ret = 0;sort(nums.begin(), nums.end(), [](int a, int b)->{return abs(a) > abs(b);});for(int i = 0; i < nums.size() - 1; ++i) {if(nums[i] < 0 && k > 0) {nums[i] *= -1;--k;}}if(k % 2 == 1) {nums[nums.size() - 1] *= -1;}for(const auto& num : nums) {ret += num;}return ret;}
};

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

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

相關文章

汽車信息安全概述

隨著智能網聯汽車的迅猛發展&#xff0c;車輛不再是簡單的交通工具&#xff0c;而是集數據收集、處理與通信于一體的移動智能終端。然而&#xff0c;這一變革也使得汽車成為黑客攻擊的新目標。汽車信息安全問題日益凸顯&#xff0c;成為行業關注的焦點。本文將深入探討汽車信息…

前后端分離vscode保險業務管理系統vue+Nodejs

本設計主要應用于完成對保險業務進行計算機化的管理。系統前臺展示各種種類的保險&#xff0c;顧客可以選擇登陸后買入。公司員工為管理員&#xff0c;由公司統一分配賬號&#xff0c;員工用工號密碼登陸。可以修改密碼&#xff0c;查看、修改自己的信息。員工可處理顧客信息。…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密碼:hvev 免費的企微框架 支持文本消息&#xff0c;圖片消息&#xff0c;視頻消息&#xff0c;文件消息。 其他可自行下載測試。 有興趣可以進群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

1.CSS單位總結

CSS 單位總結 經典真題 px 和 em 的區別 CSS 中的哪些單位 首先&#xff0c;在 CSS 中&#xff0c;單位分為兩大類&#xff0c;絕對長度單位和相對長度單位。 絕對長度單位 我們先來說這個&#xff0c;絕對長度單位最好理解&#xff0c;和我們現實生活中是一樣的。在我們…

Windows sever Event 70117000事件日志

背景&#xff1a;Windows server2008 頻繁藍屏&#xff0c;日志報錯信息時間ID&#xff1a;7011&7000&#xff0c;Service Control Manager 原因&#xff1a;Service Control Manager transmits control requests to running services and driver services. It also maint…

mysql-MVCC

一、基礎概念 1. MVCC的含義 MVCC (Multiversion Concurrency Control)&#xff0c;即多版本并發控制技術&#xff0c;它是通過讀取某個時間點的快照數據&#xff0c; 來降低并發事務沖突而引起的鎖等待&#xff0c; 從而提高并發性能的一種機制. MVCC 的實現,是通過保存數據…

汽車常識網:電腦主機如何算功率的計算方法?

今天汽車知識網就給大家講解一下如何計算一臺主機的功率。 它還會解釋如何計算計算機主機所需的功率&#xff1f; &#xff1f; &#xff08;如何計算電腦主機所需的功率&#xff09;進行說明。 如果它恰好解決了您現在面臨的問題&#xff0c;請不要忘記關注本站。 讓我們現在就…

勒索組織再次盯緊制造業!亞信安全發布《勒索家族和勒索事件監控報告》

本周態勢快速感知 本周全球共監測到勒索事件104起&#xff0c;事件數量有所下降。 lockbit3.0仍然是影響最嚴重的勒索家族&#xff1b;hunters和play也是兩個活動頻繁的惡意家族&#xff0c;需要注意防范。 本周8base勒索組織竊取安索杰國際貿易公司大量文件&#xff0c;包括…

谷歌掀桌子!開源Gemma:可商用,性能超過Llama 2!

2月22日&#xff0c;谷歌在官網宣布&#xff0c;開源大語言模型Gemma。 Gemma與谷歌最新發布的Gemini 使用了同一架構&#xff0c;有20億、70億兩種參數&#xff0c;每種參數都有預訓練和指令調優兩個版本。 根據谷歌公布的測試顯示&#xff0c;在MMLU、BBH、GSM8K等主流測試…

解密C語言選擇結構:掌握條件語句與分支邏輯的利器

引言 C語?是結構化的程序設計語?&#xff0c;這?的結構指的是順序結構、選擇結構、循環結構。為什么有著三種結構呢&#xff0c;大家其實可以想象一下&#xff0c;生活中的絕大數事情都可以抽象著三種結構&#xff0c;而我們今天要給大家介紹的就是三大結構之一——選擇結構…

Jenkins 中部署Nodejs插件并使用,并構建前端項目(3)

遇到多個版本nodeJS需要構建的時候 1、第一種就是一個配置安裝&#xff0c;然后進行選中配置 2、第二種就是插件&#xff1a;nvm-wrapper&#xff0c;我們還是選用NodeJS插件&#xff1a; &#xff08;1&#xff09;可以加載任意npmrc文件&#xff1b; &#xff08;2&#x…

鴻蒙NEXT出現有前途嗎?是否會和安卓、IOS開發歷程一樣?

只要有手機操作系統這玩意存在&#xff0c;一定是需要原生開發人員的&#xff0c;但隨著獨立操作系統越來越多的話&#xff0c;混合App開發可能是個“萬能解決方案”。 2024年&#xff0c;在中國&#xff0c;被各大媒體和開發者稱為“鴻蒙元年”。 在2023年底就有業內人士透露…

【es6】Map 和 Object 對象的區別

對象 Object Object 是一個特殊的對象&#xff0c;它本身是一個頂級對象&#xff0c;同時還是一個構造函數&#xff0c;還可以使用字面量的方式聲明一個對象本質上是鍵值對的集合&#xff0c;但是健只能是字符串 或 Symbol使用 . [] 去獲取object 的屬性&#xff0c;不存在則…

jenkins編譯使用nohup部署進程到后臺失敗,解決方法

在shell腳本中加入BUILD_IDdontKillMe server為二進制文件 #!/bin/bashBUILD_IDdontKillMenohup ./server & 原理&#xff1a;jenkins默認會在構建完成后殺掉構建過程中shell命令觸發的衍生進程。jenkins根據BUILD_ID識別某個進程是否為構建過程的衍生進程&#xff0c;故…

常見鎖策略,CAS,synchrodized原理講解

&#x1f3a5; 個人主頁&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗處執拗生長的花&#xff0c;終有一日會馥郁傳香歡迎大家&#x1f44d;點贊?評論?收藏 目錄 常見鎖策略 樂觀鎖和悲觀鎖 輕量級鎖和重量級鎖 自旋鎖和掛起等待鎖 讀寫鎖 公平鎖和非公平鎖…

基于Java+SpringBoot+Vue.js前后端分離玩具購物商城系統設計和實現 可行性分析

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

已解決java.lang.NullPointerException異常的正確解決方法,親測有效!!!

已解決 java.lang.NullPointerException 異常的正確解決方法&#xff0c;親測有效&#xff01;&#xff01;&#xff01; 文章目錄 問題分析 報錯原因 解決思路 總結 Q1 - 問題分析 在Java編程中&#xff0c;NullPointerException 可能是最常見的運行時異常之一。這種異…

基于Java在線考試網站系統 設計與實現(Springboot框架)畢業設計論文提綱參考

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

264.【華為OD機試真題】最長子字符串的長度(二)(動態規劃DP-JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目-最長子字符串的長度(二)二.解題思路三.題解代碼…

Transformer 架構—Encoder-Decoder

文章目錄 前言 一、Encoder 家族 1. BERT 2. DistilBERT 3. RoBERTa 4. XML 5. XML-RoBERTa 6. ALBERT 7. ELECTRA 8. DeBERTa 二、Decoder 家族 1. GPT 2. GPT-2 3. CTRL 4. GPT-3 5. GPT-Neo / GPT-J-6B 三、Encoder-Decoder 家族 1. T5 2. BART 3. M2M-100 4. BigBird 前言 …