算法训练 第三周

一、买卖股票的最佳时机

本题给了我们一个数组,这个数组的第i个元素表示股票第i天的价格,要求我们选择一天买入股票,并在这天之后的某一天卖出,问我们何时能获得最大利润。

1.循环嵌套

我们可以循环遍历所有买入的价格,再遍历买入天之后的价格,记录所有能获得利润的大小,最后比较产生最大值,但是这种方法在leetcode上会超时,代码如下:

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

复杂度分析

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

2.一次循环

我们只需要在一次循环中动态记录价格最小的一天并不断更新,之后在遍历到它之后的比它高的价格时进行记录,最后找出最大利润即可,代码如下:

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

复杂度分析

  • 时间复杂度:O(n)。
  • 空间复杂度:O(1)。
相关推荐
地平线开发者4 分钟前
征程 6 | 工具链 QAT ObserverBase 源码解析
算法
地平线开发者26 分钟前
【地平线 征程 6 工具链进阶教程】QAT 训练常见问题和排查
算法
地平线开发者28 分钟前
征程 6 | 直方图量化配置与校准实例
算法
地平线开发者1 小时前
征程 6E/M Matrix 开发评板使用系列(一):开箱与点亮
算法·自动驾驶
Jerry1 小时前
LeetCode 59. 螺旋矩阵 II
算法
可编程芯片开发2 小时前
基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真
算法
aaaameliaaa2 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
QiLinkOS4 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
wabs6664 小时前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划