1.买卖股票的最佳时机
题目链接:. - 力扣(LeetCode)
思路:我们其实只需遍历一篇就可以解决这个问题。首先我们定义一个min为无穷大值,再遍历只要有数字比min跟小我们就更改min的值就好,此时我们只需要找出prices[i]-min的最小值就好。
class Solution {
public int maxProfit(int[] prices) {
int n = prices.length,ret = 0;
int min = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
if(prices[i] < min){
min = prices[i];
}
ret = Math.max(ret,prices[i] - min);
}
return ret;
}
}
2.买卖股票的最佳时机二
题目链接:. - 力扣(LeetCode)
思路:从下面的曲线图我们可以看出,只要是上涨的地方我们就进行买卖。代码实现:
class Solution {
public int maxProfit(int[] prices) {
//一天一天的减
int min = Integer.MAX_VALUE,ret = 0;
for (int i = 1; i < prices.length; ) {
if( prices[i-1] < prices[i]){
ret+=prices[i] - prices[i-1];
i++;
}else{
i++;
}
}
return ret;
}
}
双指针实现:
class Solution {
public int maxProfit(int[] prices){
int ret = 0,n = prices.length;
//j增长到最大数字之后再进行相减
for (int i = 0; i < n; i++) {
int j = i;
while(j+1 < n && prices[j] < prices[j+1])j++;
ret+=prices[j] - prices[i];
i = j;
}
return ret;
}
}