欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > leetcode122-买卖股票的最佳时机II

leetcode122-买卖股票的最佳时机II

2025/5/16 16:03:13 来源:https://blog.csdn.net/weixin_45799371/article/details/147031286  浏览:    关键词:leetcode122-买卖股票的最佳时机II

leetcode 122
在这里插入图片描述

思路

方法一的核心思想是简单的贪心策略。我们每天都看当前价格和下一个价格的差值。如果下一个价格高于当前价格(即diff > 0),那么就认为当天可以买入并在第二天卖出,赚取利润。因此,方法一把所有的价格差(即diff > 0的部分)累加起来,最终得出最大利润

步骤:

遍历整个数组,计算相邻两个价格的差值
如果差值为正(表示价格上涨),则加入利润

时间复杂度:O(n),其中 n 是 prices 数组的长度,因为只需要遍历一遍数组
空间复杂度:O(1),只使用了常量空间

方法二模拟买入和卖出的策略 重点是通过标记是否已经持有股票来区分买入和卖出时机

通过比较当前和前一个价格差(curdiff 和 prediff)来决定买入和卖出。
flag 标志用来表示当前是否持有股票。如果持有股票且价格下跌,则卖出;如果没有股票且价格上涨,则买入。
在循环结束后,检查是否还有未卖出的股票,如果有则在最后时刻卖出
方法二和之前的摆动序列很相似,也可以参考此博文

实现

方法1-贪心算法
var maxProfit = function (prices) {let sum = 0;for (let i = 0; i < prices.length - 1; i++) {let diff = prices[i + 1] - prices[i]if (diff > 0) {// 可以买入sum += diff}}return sum;
};
方法2
var maxProfit = function (prices) {let prediff = 0, curdiff = 0;let sum = 0, flag = false;for (let i = 0; i < prices.length - 1; i++) {curdiff = prices[i + 1] - prices[i];if (curdiff > 0 && prediff <= 0) {// 可以买入sum -= prices[i]flag = trueprediff = curdiff}if (flag && curdiff < 0 && prediff >= 0) {// 可以卖出sum += prices[i]flag = false;prediff = curdiff}}// 到最后都还没有卖出,把最后一个卖掉if (flag) {sum += prices[prices.length - 1]}return sum;
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词