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;}
}