其实拿到题是有点思路的,我知道它可以动态规划,但是我一直不太会动态规划,我就只是想逻辑关系,不过万变不离其中吧。
给一个数组,找后边的数减前边数的最大值。
对于某一个数而言,它减去前边的最大值,一定是它减去了前边所有数中最小的那个。所以要设计一个min边遍历边判断。
找到了对于这个数而言的最大值,还要找到之前保存的最大差值,选大的作为最大值。保存在max里。
于是复杂度On
public int maxProfit(int[] prices) {
if(prices.length==1){
return 0;
}
int min=prices[0];
int max=Integer.MIN_VALUE;
for(int i=1;i<prices.length;i++){
min=Math.min(min,prices[i]);
max= Math.max(max,prices[i]-min);
}
return max;
}
又忘了特别判断。
我的问题在于,不熟练的话,如果面试,我能给他表演个当场失忆。