描述
假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益
1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
2.如果不能获取到任何利润,请返回0
3.假设买入卖出均无手续费
解题思路:
可以分别拿第一天与之后每一天比较,第二天再与之后的每一天比较,依次进行,由此可以想到可以采用冒泡排序的方式,双重循环来完成
public int maxProfit (int[] prices) {
int max=0;
for(int i=0;i<prices.length;i++){
for(int j=i+1;j<prices.length;j++){
int temp=prices[j]-prices[i];
if(temp>max){
max=temp;
}
}
}
return max;
}
当然也可以用一次循环来完成,假设第一天为最小低值,从第二天依次比较,如果小于最低值,则赋值最新的最低值,否则用当前值减去最小值记作最大值,如果当前值减去最小值大于最大值,则赋值最新的最大值
public int maxProfit (int[] prices) {
int minPrices = prices[0];
int max=0;
for(int i=1;i<prices.length;i++){
if(prices[i]<minPrices){
minPrices=prices[i];
}else if(prices[i]-minPrices>max){
max=prices[i]-minPrices;
}
}
return max;
}