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/

相关内容

热门资讯

特写 | 森马服饰郭云鹏:品牌... 观点网 当出海从一道选择题变成必答题,中国消费品牌的全球叙事正经历深刻重构。不同于早期简单的产品输出...
阿联酋外长与国际原子能机构总干... 转自:财联社【阿联酋外长与国际原子能机构总干事就无人机袭击事件通电话】财联社5月18日电,阿联酋副总...
养老院“专属家人”13年义剪还...     毛寅在养老院帮老人义剪头发。      受访者 供图  “毛老师来了!”5月16日上午,长沙...
强降雨持续 注意防范山洪...   三湘都市报5月17日讯  据气象预报,我省未来三天强降雨持续,局地单点有大暴雨。省应急委办公室提...
深圳一季度实际使用外资约170... 界面新闻记者 | 梁宝欣4月28日,界面新闻记者从深圳市投资促进局了解到,今年一季度,深圳实际使用外...