力扣 买卖股票的最佳时机

贪心算法典型例题。

题目

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

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

相关推荐
数据潜水员37 分钟前
C#基础语法
java·jvm·算法
天才测试猿43 分钟前
接口自动化测试之pytest接口关联框架封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
鸽子炖汤44 分钟前
LRC and VIP
c++·算法·图论
鑫鑫向栄1 小时前
[蓝桥杯]机器人塔
数据结构·c++·算法·蓝桥杯
暴力求解1 小时前
C语言---动态内存管理、柔性数组
c语言·开发语言·算法
_Itachi__2 小时前
LeetCode 热题 100 208. 实现 Trie (前缀树)
算法·leetcode·职场和发展
闻闻不会编程2 小时前
74. 搜索二维矩阵 (力扣)
算法·leetcode·矩阵
弥彦_2 小时前
线段树刷题记录
数据结构·c++·算法
凤年徐2 小时前
【数据结构初阶】顺序表的应用
c语言·开发语言·数据结构·c++·笔记·算法·顺序表
智驱力人工智能3 小时前
高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
人工智能·算法·安全·重构·边缘计算·高密爆炸·高密化工厂