问题:对一个已知数字进行遍历,求你能获得的最大利润。
方法一、暴力循环:
从数组的第一个元素开始依次向后比较,保留获得的最大利润;
缺点:数据量过大时,重复遍历会使消耗资源过大
public static int method1(int[] prices){
//暴力破解
int maxProfit = 0;
for(int i = 0; i<prices.length - 1;i++){
for (int j = i + 1; j < prices.length;j++){
//找到最大利润差
int p = prices[j] - prices[i];
if(p > maxProfit){
maxProfit = p;
}
}
}
return maxProfit;
}
方法二:
只进行一次遍历,保留遍历中遇到的最小值
public static int method2(int[] prices){
/*
取第一天是最低点,向后求利润,如果还有比第一天低的点对min进行替换,继续求max
* */
int max = 0;
int min = prices[0];
for (int i = 1; i < prices.length; i++){
if(min > prices[i]){
min = prices[i];
}else if(prices[i] - min > max){
max = prices[i] - min;
}
}
return max;
}