leetcode 刷题 log day 49
创始人
2024-04-14 15:48:45
  • 121. 买卖股票的最佳时机
    思路】每天只有两种状态:持有股票或者不持有股票,持有股票时又分为前一天不持有买入股票和前一天持有股票保持两种情况。不持有股票也分为前一天持有股票卖出和前一天不持有股票保持两种情况。分别选取每种状态的两种情况的最大值。

    var maxProfit = function(prices) {let dp = new Array(prices.length).fill([0, 0]);dp[0] = [-prices[0], 0];for (let i = 1; i < prices.length; i++) {dp[i] = [Math.max(dp[i - 1][0], -prices[i]),  // 持有股票:昨天不持有或今天买入(因为只能买入一次,所以为 -prices[i])Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i])  // 不持有股票:昨天不持有或今天卖出]}return dp[prices.length - 1][1];  // 最终手里不持有股票才能收益最大化
    };
    
  • 122. 买卖股票的最佳时机II
    思路】这道题比上一道多了条件可以多次买入,所以递推公式有区别,其余一样。

    // 贪心
    var maxProfit = function(prices) {// 价格递增的话就每天买入买出let res = 0;for (let i = 1; i < prices.length; i++) {if (prices[i] - prices[i - 1] > 0) res += prices[i] - prices[i - 1];}return res;
    };// 动规
    var maxProfit = function(prices) {let dp = new Array(prices).fill([0, 0]);dp[0] = [-prices[0], 0];for (let i = 1; i < prices.length; i++) {dp[i] = [Math.max(dp[i - 1][1] - prices[i], dp[i - 1][0]),  // 第 i 天持有:前一天不持有且 i 天买入股份或前一天不持有(因为可以多次买入,所以买入股票时等于前一天不持有股票的收益减去股票价格)Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1])  // 第 i 天不持有:前一天持有且 i 天卖出或前一天不持有]}return dp[prices.length - 1][1];  // 最终手里不持有股票才能收益最大化
    }
    

参考代码随想录:https://www.programmercarl.com/

相关内容

热门资讯

克洛泽16球的进球纪录 梅西和... 转自:金羊网-新快报■“榜一大哥”德国传奇前锋克洛泽。北京时间明天凌晨,2026年美加墨世界杯就将拉...
老挝土匪山发生两起翻车事故致两... 中国驻琅勃拉邦总领事馆6月10日发布关于注意行车安全的领事提醒。近期,在老挝琅勃拉邦省22号公路九公...
风浪里的深蓝牧场 在东海远洋培... 团队在现场调试设备。受访者供图6月9日,浙大宁波理工学院机电与能源工程学院大三学生张钦耘,又一次跟随...
1.54亿元!长安汽车转让合资... (来源:汽车之地)据重庆联合产权交易所官网显示,重庆长安汽车股份有限公司(以下简称长安汽车)挂牌转让...
跨越“死亡谷” 低空经济将“高... □本报记者 何可  5月28日,四川自贡兰田机场内,伴随着8个升力旋翼高速切割空气的低鸣,一架沃兰特...