题目:
吐槽:A掉很简单的题目,穷举就可以了。写动态规划的时候发现,这个思路有点跟滑动门的算法有点类似。
穷举法:
/**
* 双重循环把后面的一次减去前面的值,将最大值保存住即可
* @param prices
* @return
*/
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++){
if(max<(prices[j]-prices[i])){
max = prices[j]-prices[i];
}
}
}
return max;
}
遍历一次
/**
* 只要右面大的数减去左面小的数就可以了。时刻记录左面最小的值minindex。遍历一遍的时候一直计算相差的最大值,当出现更小的值的时候,
* minindex改变成当前最小值
* @param prices
* @return
*/
public int maxProfit(int[] prices) {
int max = 0;//记录获得的最大利益
int minindex = 0;//最小值的数组标记位
int i =1;//遍历的下标
while(i<prices.length){
//当遍历的值比最小值大,计算获得的利益
if(prices[i]>prices[minindex]){
if(max<(prices[i]-prices[minindex])){
max = prices[i]-prices[minindex];
}
i++;
}else{
//当遍历的值比最小值小,重新记录最小值,继续遍历
minindex = i;
i++;
}
}
return max;
}