121. 买卖股票的最佳时机 --力扣 --JAVA

题目

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

解题思路

  1. 排除特殊情况即只有一天可交易,那么利润一定为0;
  2. 对数组进行遍历然后读取有利润差的日期和利润,并返回最大利润;
  3. 在新的最小值出现而最大值不为初始值的情况下,需要重置最大值,因为最大值一定出现在最小值后面。

代码展示

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n == 1){
            return 0;
        }
        int ans = 0;
        int min = prices[0];
        int max = -1;
        for (int i = 1; i < n; i++){
            if(prices[i] < min){
                min = prices[i];
                max = -1;
            } else if(prices[i] > max){
                max = prices[i];
                ans = Math.max(ans, max - min);
            }
        }
        return ans;
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)