leetcode hot100 買賣股票的最佳時機1

在這里插入圖片描述
本題之前采用貪心算法來解決,現在可以采用動態規劃來解決,通過dp數組記錄每次的狀態從而獲取到最大的利潤。

這里dp數組定義為二維數組 dp[price.length][2],其中price.length表示第i天,[2]其中有0/1兩種狀態,[0]表示持有股票,[1]表示沒有持有股票。注意,持有并不代表一定是當天買入!也可能是之前買入的。

那么,dp[i][0]表示第i天持有股票,那么i-1天可能持有股票,此時是dp[i-1][0],如果第i-1天沒有持有股票,那一定是第i天買入的,第i天買入股票,由于開始的時候手里沒有錢,當買入的時候,手里的金額是-price[i]。所以 持有股票的遞推公式dp[i][0] = Math.max(dp[i-1][0],-price[i])。如果第i天不持有,就是dp[i][1] ,第i天不持有的話,可能是i-1天就不持有了,那么就是dp[i-1][1],也可能是第i天賣掉了,那么就是dp[i-1][0]+price[i]。所以遞推公式就是dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i])。

初始化:dp[0][0],表示第0天持有股票,那么一定是當天買入的股票,所以此時是-price[0]。dp[0][1]表示第0天不持有股票,則一定是0.

遍歷順序:我們是根據前一天的狀態得到后一天的狀態,所以i從1開始,直接遍歷。

打印數組

class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.length == 0) return 0;int length = prices.length;// dp[i][0]代表第i天持有股票的最大收益// dp[i][1]代表第i天不持有股票的最大收益int[][] dp = new int[length][2];int result = 0;dp[0][0] = -prices[0];dp[0][1] = 0;for (int i = 1; i < length; i++) {dp[i][0] = Math.max(dp[i - 1][0], -prices[i]);dp[i][1] = Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1]);}return dp[length - 1][1];}
}

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

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

相關文章

六、回歸與聚類算法 - 欠擬合和過擬合

目錄 1、定義 2、原因及解決方法 2.1 正則化 線性回歸欠擬合與過擬合線性回歸的改進 - 嶺回歸分類算法&#xff1a;邏輯回歸模型保存與加載無監督學習&#xff1a;K-means算法 1、定義 2、原因及解決方法 2.1 正則化

電路設計(26)——速度表的multisim仿真

1.設計要求 設計一款電路&#xff0c;能夠實時顯示當前速度。 用輸入信號模擬行駛的汽車&#xff0c;信號頻率的1hz代表汽車速度的1m/s。最后速度顯示&#xff0c;以km/h為單位。 2.電路設計 當輸入信號頻率為40HZ時&#xff0c;顯示的速度應該為144KM/h&#xff0c;仿真結果為…

HTTP基本概念-HTTP 常見的狀態碼有哪些?

資料來源 : 小林coding 小林官方網站 : 小林coding (xiaolincoding.com) HTTP 常見的狀態碼有哪些? 1xx 類狀態碼屬于提示信息&#xff0c;是協議處理中的一種中間狀態&#xff0c;實際用到的比較少。 2xx 類狀態碼表示服務器成功處理了客戶端的請求&#xff0c;也是我們最愿…

第一個 Angular 項目 - 添加服務

第一個 Angular 項目 - 添加服務 這里主要用到的內容就是 [Angular 基礎] - service 服務 提到的 前置項目在 第一個 Angular 項目 - 動態頁面 這里查看 想要實現的功能是簡化 shopping-list 和 recipe 之間的跨組件交流 回顧一下項目的結構&#xff1a; ? tree src/app/…

[概念區分] 正則表達式與正則化

正則表達式與正則化 機器學習在計算機科學和數據處理領域&#xff0c;關于“正則”的兩個術語&#xff1a;正則表達式和正則化&#xff0c;雖然它們在名稱上非常相似&#xff0c;但實際上它們是完全不同的概念。 正則表達式 也被稱為 regex&#xff0c;是一種強大的工具&…

Linux freezer機制

一、概述 系統進入suspended或進程被加入到cgroup凍結或解凍分組&#xff0c;用戶進程和部分內核線程被凍結后&#xff0c;會剝奪執行cpu資源&#xff0c;解凍或喚醒后恢復正常。 二、進程凍結與解凍原理 2.1 進程凍結 用戶進程和內核線程凍結的基本流程&#xff1a; 內核態…

設計模式-建造者模式(Builder Pattern)

一、建造者模式說明 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;它的主要目的是將一個復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 在建造者模式中&#xff0c;通常涉及以下幾個角色&#xf…

多業務場景下對于redis分布式鎖的一些思考

現在讓你寫一個Redis分布式鎖 大概率你會先寫一個框架 public Boolean setIfAbsent(String key, Object value,Long timeout) {try {return Boolean.TRUE.equals(objectRedisTemplate.opsForValue().setIfAbsent(key, value,timeout,TimeUnit.SECONDS));} catch (Exception e) …

2024開年,手機廠商革了自己的命

文&#xff5c;劉俊宏 編&#xff5c;王一粟 2024開年&#xff0c;AI終端的號角已經由手機行業吹響。 OPPO春節期間就沒閑著&#xff0c;首席產品官劉作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式進入AI手機時代。隨后在開年后就緊急召開了AI戰略發布會&#xff0c;…

【Antd】Form 表單獲取不到 Input 的值

文章目錄 今天遇到了一個奇怪的bug&#xff0c;Form表單中的Input組件的值&#xff0c;不能被Form獲取&#xff0c;導致輸入了內容&#xff0c;但是表單提交的時候值為undefined 報錯代碼 import { Button, Form, Input } from antd; import React from react;const App: Rea…

GaussDB SQL調優:建立合適的索引

背景 GaussDB是華為公司傾力打造的自研企業級分布式關系型數據庫&#xff0c;該產品具備企業級復雜事務混合負載能力&#xff0c;同時支持優異的分布式事務&#xff0c;同城跨AZ部署&#xff0c;數據0丟失&#xff0c;支持1000擴展能力&#xff0c;PB級海量存儲等企業級數據庫…

SQL中為什么不要使用1=1

最近看幾個老項目的SQL條件中使用了11&#xff0c;想想自己也曾經這樣寫過&#xff0c;略有感觸&#xff0c;特別拿出來說道說道。 編寫SQL語句就像炒菜&#xff0c;每一種調料的使用都可能會影響菜品的最終味道&#xff0c;每一個SQL條件的加入也可能會影響查詢的執行效率。那…

昨天Google發布了最新的開源模型Gemma,今天我來體驗一下

前言 看看以前寫的文章&#xff0c;業余搞人工智能還是很早之前的事情了&#xff0c;之前為了高工資&#xff0c;一直想從事人工智能相關的工作都沒有實現。現在終于可以安靜地系統地學習一下了。也是一邊學習一邊寫博客記錄吧。 昨天Google發布了最新的開源模型Gemma&#xf…

電商數據采集的幾個標準

面對體量巨大的電商數據&#xff0c;很多品牌會選擇對自己有用的數據進行分析&#xff0c;比如在控價過程中&#xff0c;需要對商品的價格數據進行監測&#xff0c;或者是需要做數據分析時&#xff0c;則需要采集到商品的價格、銷量、評價量、標題、店鋪名等信息&#xff0c;數…

Unity中.Net與Mono的關系

什么是.NET .NET是一個開發框架&#xff0c;它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)兩種約定&#xff0c; CIL標準為一種編譯標準&#xff1a;將不同編程語言&#xff08;C#, JS, VB等&#xff09;使用各自的編譯器&#xff0c;按照統…

JavaScript 原始值和引用值在變量復制時的異同

相比于其他語言&#xff0c;JavaScript 中的變量可謂獨樹一幟。正如 ECMA-262 所規定的&#xff0c;JavaScript 變量是松散類型的&#xff0c;而且變量不過就是特定時間點一個特定值的名稱而已。由于沒有規則定義變量必須包含什么數據類型&#xff0c;變量的值和數據類型在腳本…

mysql.service is not a native service, redirecting to systemd-sysv-install

字面意思&#xff1a;mysql.service不是本機服務&#xff0c;正在重定向到systemd sysv安裝 在CentOS上使用Systemd管理MySQL服務的具體步驟如下&#xff1a; 1、創建MySQL服務單元文件&#xff1a; 首先&#xff0c;你需要創建一個Systemd服務單元文件&#xff0c;以便Syste…

【Python筆記-設計模式】原型模式

一、說明 原型模式是一種創建型設計模式&#xff0c; 用于創建重復的對象&#xff0c;同時又能保證性能。 使一個原型實例指定了要創建的對象的種類&#xff0c;并且通過拷貝這個原型來創建新的對象。 (一) 解決問題 主要解決了對象的創建與復制過程中的性能問題。主要針對…

redhawk:使用ipf文件反標instance power

我正在「拾陸樓」和朋友們討論有趣的話題,你?起來吧? 拾陸樓知識星球入口 往期文章鏈接: Redhawk:Input Data Preparation 使用ptpx和redhawk報告功耗時差別總是很大,如果需要反標top/block的功耗值可以在gsr文件中使用BLOCK_POWER_FOR_SCALING的命令

Verilog刷題筆記35

題目&#xff1a; Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel0 should select in[0], sel1 selects bits in[1], sel2 selects bits in[2], etc. 解法&#xff1a; module top_module( input [255:…