今天是第28天刷leetcode,立个flag,打卡60天。
算法挑战链接
122. 买卖股票的最佳时机 IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/
第一想法
题目理解:找到一个升序的段,然后累加每一个升序的段头尾的差值。
题目比较简单,大概要完成的事情就是:找到一个升序段,保存头和尾,计算差值。
怎么找到升序的段呢?方法也是很简单的。
将数组的第一个赋值给头和尾,然后遍历数组。
如果当前值 小于 尾,计算差值,并且将当前值赋值给 头
将当前值赋值给 尾
循环结束之后需要判断一下最后一次是否需要卖出。
代码如下:
class Solution {
public int maxProfit(int[] prices) {
if (prices.length==0 || prices.length == 1) {
return 0;
}
int result = 0;
int start = prices[0];
int end = prices[0];
for (int i = 1; i < prices.length; i++) {
if (prices[i] < end) {
result += end - start;
start = prices[i];
}
end = prices[i];
}
if (start < end) {
result += end - start;
}
return result;
}
}
看完代码随想录之后的想法
贪心算法的写法,先贴代码:
// 贪心思路
class Solution {
public int maxProfit(int[] prices) {
int result = 0;
for (int i = 1; i < prices.length; i++) {
result += Math.max(prices[i] - prices[i - 1], 0);
}
return result;
}
}
大概的思路就是,如果当前值小于前一个值,那么就计算值。
简单粗暴!!!!!
今日收获
贪心算法的核心:以局部最优达到全局最优