https://datawhalechina.github.io/leetcode-notes/#/ch07/07.04/07.04.01-Exercises
策略就是后续天的价格必需大于当前的价格, 一旦价格小于当前买入价格, 则必需考虑重新设定买于价格后,可以取得的最大收益, 具体算法如下:
class Solution {
public int maxProfit(int[] prices) {
int min=prices[0],max=prices[0];
int id=0,id2=0;
int ret=0;
for(int i=1;i<prices.length;i++){
if(prices[i]<min){if(prices[i-1]-min>ret)ret=prices[i-1]-min;min=prices[i];id=i;}
else if(prices[i]>min){if(prices[i]-min>ret)ret=prices[i]-min;}
// System.out.println("min:id:i:ret::"+min+":"+id+":"+i+":"+ret);
}
if(prices[prices.length-1]-min>ret)ret=prices[prices.length-1]-min;
// System.out.println("min:id:i"+min+":"+id+":"+(prices.length-1)+":"+ret);
return ret;
}
}
这首题目要考察的是,当允许多次购买时,能够取得的最大收益,做为一个考虑收益的操作,
每一次存在递减的情况(后一个数小于前一个数),则需要考虑一次卖出,再接着买入,具体算法如下:
class Solution {
public int maxProfit(int[] prices) {
int min=prices[0],max=prices[0];
int id=0,id2=0;
int ret=0;
for(int i=1;i<prices.length;i++){
if(prices[i]<prices[i-1]){min=prices[i];id=i;}
else if(prices[i]>prices[i-1]){ret+=prices[i]-prices[i-1];}
// System.out.println("min:id:i:ret::"+min+":"+id+":"+i+":"+ret);
}
// if(prices[prices.length-1]-min>ret)ret=prices[prices.length-1]-min;
// System.out.println("min:id:i"+min+":"+id+":"+(prices.length-1)+":"+ret);
return ret;
}
}
以下链接在电脑端访问:
https://www.odc.org.cn/page148?article_id=62