力扣 买卖股票的最佳时机

贪心算法典型例题。

题目

做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数作比较,可以选用两个for循环。这题用dp同理,不过dp数组存状态是多余的。

时间复杂度: O(n^2),空间复杂度: O(1)。

java 复制代码
public class Solution {
    public int maxProfit(int[] prices) {
        int max = 0;
        for (int i = 0; i < prices.length - 1; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                int profit = prices[j] - prices[i];
                if (profit > max) {
                    max = profit;
                }
            }
        }
        return max;
    }
}

不过超时了,可以优化一下,从前往后遍历,每遍历到一个数,即每去到一天时,去存最低价跟最大利润,因为最低价购入可以得到更大利润,最高价直接更新最大利润。

时间复杂度: O(n),空间复杂度: O(1)。

java 复制代码
public class Solution {
    public int maxProfit(int[] prices) {

        int pre = prices[0];
        int ans = 0;
        for (int i = 0; i < prices.length; i++) {
           ans = Math.max(ans, prices[i] - pre);
           pre = Math.min(pre, prices[i]);
        }
        return ans;
    }
}

贪心的策略是,每到一个数可存到一个局部最优解,而遍历完后做一次次更新去得到目标值。

相关推荐
CV-Climber2 小时前
检索技术的实际应用
人工智能·算法
hhzz2 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_3 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
TsingtaoAI3 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅
atunet4 小时前
关于图算法中的连通分量检测与最小割问题7
算法
心运软件4 小时前
银行客户流失预测(Python 完整实战)
算法
邪神与厨二病4 小时前
牛客周赛 Round 153
python·算法
程序员Rock4 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
qizayaoshuap6 小时前
# ❌ 井字棋 — 鸿蒙ArkTS Minimax AI算法与博弈系统设计
人工智能·算法·华为·harmonyos
皓月斯语7 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解