leetcode刷题28
今天刷的题是LeetCode第121题,这道题是给定一个数组,表示某股票的某一天的价格,然后假定你只能买卖一次,求最大利润
首先肯定是暴力算法,两遍for循环了事,代码如下
public static int solution(int[] prices){ //暴力法 int result=0; for (int i = 1; i <prices.length-1; i++) { for (int j = i+1; j <prices.length ; j++) { if (prices[j]-prices[i]>result)result=prices[j]-prices[i]; } } return result; }
然后,我看运行时间比较高,就去看了看官方的解答思路,有点儿秀
具体地,就是更新最小值,一般地,最小值之后更有可能出现最大利润,,但是也还是需要进行比较。代码如下
public static int solution2(int[] prices){ int minprice=Integer.MAX_VALUE; int result=0; for (int i = 0; i <prices.length ; i++) { if (prices[i]<minprice)minprice=prices[i]; else if (prices[i]-minprice>result)result=prices[i]-minprice; } return result; }