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/

相关内容

热门资讯

毫米级贴边与全域清洁 泳池机器... 封面新闻记者 吴雨佳近日,拉斯维加斯国际消费类电子产品展览会(CES 2026)现场,随着智能家居场...
A股今年首份银行高管增持公告来... 转自:财联社财联社1月12日讯(记者 邹俊涛)A股今年首份银行高管增持公告“出炉”。1月12日晚,渝...
市十六届人大常委会第二十七次会... (来源:上观新闻)市十六届人大常委会第二十七次会议今天(1月12日)举行。市人大常委会主任黄莉新主持...
钱大妈冲刺港交所:社区生鲜龙头...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   1月12日,社区...
V观财报|中新集团、会稽山齐发...   中新经纬1月12日电 1月12日,中新苏州工业园区开发集团股份有限公司(下称“中新集团”)、会稽...