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;
    }
原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11510396.html