代碼隨想錄算法訓練營第五十天 | 買股票2

目錄

  • 買賣股票的最佳時機III
  • 買賣股票的最佳時機IV

LeetCode 123.買賣股票的最佳時機III
LeetCode 123.買賣股票的最佳時機IV

買賣股票的最佳時機III

給定一個數組,它的第 i 個元素是一支給定的股票在第 i 天的價格。

設計一個算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。

  • 題目關鍵在于至多買賣兩次,意味著可以買賣一次,可以買賣兩次,也可以不買賣
  • 之前dp數組有兩個狀態 0 : 持有, 1: 不持有
  • 現在dp數組有五個狀態
    • 0 :沒有操作 (其實我們也可以不設置這個狀態)
    • 1 :第一次持有股票
    • 2 :第一次不持有股票
    • 3 :第二次持有股票
    • 4 :第二次不持有股票

達到dp[i][1]狀態:

  • 操作一:第i天買入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]
  • 操作二:第i天沒有操作,而是沿用前一天買入的狀態,即:dp[i][1] = dp[i - 1][1]
  • dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);

同理 ,其他類似

  • 第0天沒有操作 dp[0][0] = 0;
  • 第0天做第一次買入的操作,dp[0][1] = -prices[0];
  • 第0天做第一次賣出的操作,dp[0][2] = 0;
  • 第二次買入操作,初始化為:dp[0][3] = -prices[0];
  • 第二次賣出初始化 dp[0][4] = 0;
class Solution {public int maxProfit(int[] prices) {if (prices.length == 0) return 0;int[][] dp = new int[prices.length][5];/** 定義 5 種狀態:* 0: 沒有操作, 1: 第一次買入, 2: 第一次賣出, 3: 第二次買入, 4: 第二次賣出*/dp[0][0] = 0; // 第0天沒有操作, 可以不設置dp[0][1] = -prices[0];  // 第0天第一次買入股票的狀態dp[0][2] = 0;dp[0][3] = -prices[0];dp[0][4] = 0;for (int i = 1; i < prices.length; i++) {// dp[i][0] = dp[i - 1][0];dp[i][1] = Math.max(dp[i - 1][1], 0 - prices[i]);  // dp[i - 1][0] - prices[i]dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][1] + prices[i]);dp[i][3] = Math.max(dp[i - 1][3], dp[i - 1][2] - prices[i]);dp[i][4] = Math.max(dp[i - 1][4], dp[i - 1][3] + prices[i]);}return dp[prices.length - 1][4];}
}
class Solution {public int maxProfit(int[] prices) {if (prices.length == 0) return 0;int[] dp = new int[4];// 定義四種狀態// dp[0] 代表第一次交易的買入dp[0] = -prices[0];// dp[1] 代表第一次交易的買入dp[1] = 0;// dp[2] 代表第一次交易的買入dp[2] = -prices[0];// dp[3] 代表第一次交易的買入dp[3] = 0;for (int i = 0; i < prices.length; i++) {dp[0] = Math.max(dp[0], -prices[i]);dp[1] = Math.max(dp[1], dp[0] + prices[i]);dp[2] = Math.max(dp[2], dp[1] - prices[i]);dp[3] = Math.max(dp[3], dp[2] + prices[i]);}return dp[3];}
}

買賣股票的最佳時機IV

class Solution {public int maxProfit(int k, int[] prices) {if (prices.length == 0) return 0;int[][] dp = new int[prices.length][2*k + 1];int n = 1;for (int i = 1; i <= 2*k; i++) {if (i % 2 == 1) dp[0][i] = -prices[0];}for (int i = 1; i < prices.length; i++) {dp[i][0] = dp[i-1][0];for (int j = 1; j <= 2*k; j++) {if (j % 2 == 1) n = -1;else n = 1;dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-1] + n * prices[i]);}}return dp[prices.length - 1][2*k];}
}

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

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

相關文章

牛客周賽 Round 35(A,B,C,D,E,F,G)

這場簡單&#xff0c;甚至賽時90分鐘不到就AK了。比賽鏈接&#xff0c;隊友題解友鏈 剛入住學校監獄&#xff0c;很不適應&#xff0c;最近難受的要死&#xff0c;加上最近幾場CF打的都不順利&#xff0c;san值要爆掉了&#xff0c;只能慢慢補題了。 這場C是個滑動窗口&#…

冒泡排序 和 qsort排序

目錄 冒泡排序 冒泡排序部分 輸出函數部分 主函數部分 總代碼 控制臺輸出顯示 總代碼解釋 冒泡排序優化 冒泡排序 主函數 總代碼 代碼優化解釋 qsort 排序 qsort 的介紹 使用qsort排序整型數據 使用qsort排序結構數據 冒泡排序 首先&#xff0c;我先介紹我的冒泡…

模糊搜索小案例

C#窗體實現數據錄入與模糊搜索小案例 記錄一下 主要代碼 private void button1_Click(object sender, EventArgs e){string name textBox1.Text;string hometown textBox4.Text;string school textBox6.Text;string sex textBox5.Text;string lat textBox3.Text;string …

c#打印BarTend標簽提示:具名數據源沒有cuckoo*具名數據(解決)

c#打印BarTend標簽提示&#xff1a;具名數據源沒有cuckoo*具名數據&#xff08;解決&#xff09; 今天咕咕更新打印模板的時候遇到的問題&#xff0c;就是在模版中配置了字段名&#xff0c;但是啟動c#應用&#xff0c;后端發送json數據打印的時候c#報錯提示&#xff0c;沒有在…

python 小游戲《2048》字符版非圖形界面

參考鏈接&#xff1a; 閑談2048小游戲和數組的旋轉及翻轉和轉置 目錄 2048 一、方陣類 二、隨機插入1或2 三、 合并和遞增 四、 判斷和移動 五、 鍵盤控制 完整源代碼 玩法過程 2048 上回說到2048小游戲中數組的各種旋轉、翻轉的方法&#xff0c;就是為代碼編程作準…

第十六天-爬蟲selenium庫

目錄 1.介紹 2.使用 selenium 1.安裝 2.使用 1.測試打開網頁&#xff0c;抓取雷速體育日職乙信息 2.通過xpath查找 3.輸入文本框內容 send_keys 4.點擊事件 click 5.獲取網頁源碼&#xff1a; 6.獲取cookies 7.seleniumt提供元素定位方式&#xff1a;8種 8.控制瀏覽…

Spring Security OAuth2如何自定義返回的 Token 信息

文章目錄 Spring Security OAuth2如何自定義返回的 Token 信息定制不透明令牌的信息Springsecurity-oauth2之TokenEndPoint參考Spring Security OAuth2如何自定義返回的 Token 信息 Spring Boot+OAuth2,如何自定義返回的 Token 信息? 參考URL: https://www.jianshu.com/p/b7…

【Go】指針的聲明和初始化

package mainimport "fmt"func main() {// 聲明一個整數變量var num int 42// 聲明一個指向整數的指針變量&#xff0c;并將其初始化為指向整數變量的地址var ptr *int &num// 打印整數變量的值和指針變量的值&#xff08;即整數變量的地址&#xff09;fmt.Pri…

2024第24屆中國國際工業博覽會新能源與智能網聯汽車展電池制造展館

2024第24屆中國國際工業博覽會新能源與智能網聯汽車展電池制造展館 時間&#xff1a;2024年9月24日-28日 地點&#xff1a;國家會展中心&#xff08;上海&#xff09; 主辦單位&#xff1a;工業和信息化部、國家發展和改革委員會、科學技術部、商務部、中國科學院、中國工程…

【游記】GDOI2024

GDOI2024游記 老年退役選手。NOIP 218 分&#xff0c;GDOI 純純旅游。 Day -5 周日返校&#xff0c;開始停課。 開始攢 rp。 Day -4 模擬賽&#xff0c;犯困&#xff0c;啥也不會。 下午打球。 Day -3 模擬賽&#xff0c;不困&#xff0c;還是啥也不會。 下午打球。 …

CSS3單獨制作移動端頁面布局方式(流式布局、flex彈性布局)

目錄 1. 流式布局(百分比布局)2. flex彈性布局(強烈推薦)2.1 介紹2.2 Flex容器常見屬性2.2.1 flex-direction2.2.2 justify-content2.2.3 flex-wrap2.2.4 align-items2.2.5 align-content2.2.6 flex-flow 2.3 Flex項目常見屬性2.3.1 flex2.3.2 align-self和order 1. 流式布局(百…

銀河麒麟之Workstation安裝

一、VMware Workstation簡介 VMware Workstation是一款由VMware公司開發的虛擬化軟件&#xff0c;它允許用戶在一臺物理計算機上運行多個操作系統&#xff0c;并在每個操作系統中運行多個虛擬機。VMware Workstation提供了一個可視化的用戶界面&#xff0c;使用戶可以輕松創建、…

程序環境和預處理(2)

文章目錄 3.2.7 命名約定 3.3 #undef3.4 命令行定義3.5 條件編譯3.6 文件包含3.6.1 頭文件被包含的方式3.6.2 嵌套文件包含 4. 其他預處理指令 3.2.7 命名約定 一般來講函數和宏的使用語法很相似&#xff0c;所以語言本身沒法幫我們區分二者&#xff0c;那我們平時的一個習慣是…

linux條件判斷之if-then

if..then是最常見的條件判斷語句&#xff0c;簡而言之&#xff0c;就是當符合某個條件判斷的時候&#xff0c;就予以進行某項工作。 1.if-then格式 if-then格式1&#xff1a; if [ 條件判斷表達式 ];then 當條件判斷表達式成立時&#xff0c;需執行的命令 fi if-then格式2…

Redis安全加固策略:綁定Redis監聽的IP地址 修改默認端口 禁用或者重命名高危命令

Redis安全加固策略&#xff1a;綁定Redis監聽的IP地址 & 修改默認端口 & 禁用或者重命名高危命令 1.1 綁定Redis監聽的IP地址1.2 修改默認端口1.3 禁用或者重命名高危命令1.4 附&#xff1a;redis配置文件詳解&#xff08;來源于網絡&#xff09; &#x1f496;The Beg…

驅動開發面試復習

創建字符設備 1 創建設備號 alloc_chrdev_region 2.創建cdev cdev_init 3.添加一個 cdev,完成字符設備注冊到內核 cdev_add 4.創建類 class_create 5.創建設備 device_create 1.內核空間與用戶空間數據 copy_from_user 和copy_to_user 倆個函數來完成。 copy_from_user 函數…

618快遞準點到達,別忘了感謝它!

進入6月以來&#xff0c;全國快遞日均業務量飛速上漲。 雖然618大促是電商的主場&#xff0c;但作為不可或缺的物流環節&#xff0c;為了這場年中大考&#xff0c;快遞企業在此期間也使盡渾身解數&#xff0c;競相比拼配送速度。那么&#xff0c;為了更快的時效&#xff0c;快遞…

uniapp 的video播放如何實現小窗功能

在頁面中使用<video>組件來展示視頻&#xff0c;并設置好相應的屬性和事件監聽&#xff1a; <video src"video.mp4" play"onVideoPlay" pause"onVideoPause"></video>在頁面的data中定義一個變量來表示是否開啟小窗模式&#…

【Wio Terminal】使用WiFi(3)- Wi-F的高級使用

使用WiFi&#xff08;3&#xff09; Wi-F的高級使用HTTPClient 的使用HTTP GETHTTPs GETHTTP POSTWebServerHTTP Authentication Web ServerDNSServermDNSmDNS-SDWiFiManager Wi-F的高級使用 本節介紹了一些WiFi的高級庫用法&#xff0c;如HTTPClient、DNSServer和WebServer庫…

美國亞利桑那州立大學宣布與OpenAI建立合作伙伴關系!

美國亞利桑那州立大學 (Arizona State University) 在官網宣布—— 將與OpenAI建立合作伙伴關系&#xff01; 該校也成為了第一個與OpenAI合作的高等教育機構。 來源&#xff1a;亞利桑那州立大學官網 亞利桑那州立大學校長表示&#xff1a; “我們認識到人工智能系統將持續…