问题:假设你有一个数组,其中第i个元素表示某只股票在第i天的价格。
设计一个算法来寻找最大的利润。你可以完成任意数量的交易(例如,多次购买和出售股票的一股)。但是,你不能同时进行多个交易(即,你必须在再次购买之前卖出之前买的股票)。
思路:其实这个问题可以等价于在给的数组里面找到所有的升序数组,然后对每个升序数组首尾相减,就是每次能获得的最大利润,再把得到所有的值相加起来,得到的就是最大利润了。我们用整型变量a, b分别来表示每次的买入和卖出的价格,用布尔型变量status来表示现在手上是否有股票,从而保证手上最多只有一张股票。
实现过程:
public int maxProfit (int[] prices){
int profit = 0;//利润
int a = 0;
int b = 0;//a,b分别为买入和卖出价格
boolean status = false;//判断现在手上是否有股票
if(prices.length == 0){
return 0;
}
for(int i=0;i<prices.length-1;i++){
if(status == false){//手上无股票时,挑低价买入
if(prices[i] < prices[i+1]){
a = prices[i];
status = true;