力扣 买卖股票的最佳时机

贪心算法典型例题。

题目

做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数作比较,可以选用两个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;
    }
}

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

相关推荐
noipp1 天前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉1 天前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉1 天前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木1 天前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕1 天前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠1 天前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠1 天前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe11 天前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
有点。1 天前
C++(贪心算法一)
c++·贪心算法
Matrix_111 天前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影