LeetCode:121.买卖股票的最佳时机1

news/2025/2/3 11:59:29 标签: leetcode, 算法, java, 动态规划

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:121.买卖股票的最佳时机1
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

动态规划法:

  • dp[i][0]表示第i天持有股票时的最多现金,这里的持有并不是第i天买股票的意思,也可以是第i - 1天买,或第i - 2天买,然后一直持有到第i
  • dp[i][1]表示第i天不持有股票时的最多现金
  • 初始化:dp[0][0] = -prices[0],dp[0][1] = 0
  • 递推公式:dp[i][0] = Math.max(dp[i - 1][0], -prices[i]),
  • dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i])
java">	public int maxProfit(int[] prices) {
        int[][] dp = new int[prices.length][2];
        // 持有股票的最大金额
        dp[0][0] = -prices[0];
        // 不持有股票的最大金额
        dp[0][1] = 0;
        for (int i = 1; i < prices.length; i++) {
        	// 持有股票:要么昨天就持有,要么昨天不持有且今天持有
            dp[i][0] = Math.max(dp[i - 1][0], -prices[i]);
            // 不持有股票:要么昨天就不持有,要么今天卖出
            dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i]);
        }
        // 肯定是不持有金额最多
        return dp[prices.length - 1][1];
    }

贪心法:

  • 先找到第i天以前股票价格最低的时候,然后在计算第i天卖出去所得到的利润
java">	public int maxProfit(int[] prices) {
        int low = Integer.MAX_VALUE;
        int res = 0;
        for (int i = 0; i < prices.length; i++) {
            low = Math.min(low, prices[i]);
            res = Math.max(res, prices[i] - low);
        }
        return res;
    }

http://www.niftyadmin.cn/n/5840775.html

相关文章

LeetCode 2909. 元素和最小的山形三元组 II

**### LeetCode 2909. 元素和最小的山形三元组 II 问题描述 给定一个下标从 0 开始的整数数组 nums&#xff0c;我们需要找到一个“山形三元组”&#xff08;i, j, k&#xff09;满足以下条件&#xff1a; i < j < knums[i] < nums[j] 且 nums[k] < nums[j] 并…

Android 开发:新的一年,新的征程

回顾 2023 年&#xff0c;Android 开发领域可谓成果斐然。这一年&#xff0c;Android 系统不断迭代&#xff0c;新技术、新工具层出不穷&#xff0c;为开发者们带来了前所未有的机遇与挑战。如今&#xff0c;我们站在新的起点&#xff0c;怀揣着对技术的热爱与追求&#xff0c;…

UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备

1 将用到的图标找好&#xff0c;放一起 DataTable里对应好图标 测试一下能正确获取&#xff1a; 2 装备增强属性思路 给FMyItemInfo添加一个枚举变量记录类型&#xff08;物品&#xff0c;道具&#xff0c;装备&#xff0c;饰品&#xff0c;武器&#xff09;--> 扩展DataT…

XML DOM - 导航节点

可通过使用节点间的关系对节点进行导航。 导航 DOM 节点 通过节点间的关系访问节点树中的节点&#xff0c;通常称为导航节点&#xff08;"navigating nodes"&#xff09;。 在 XML DOM 中&#xff0c;节点的关系被定义为节点的属性&#xff1a; parentNodechildNo…

面试题-消失的数字-异或

消失的数字 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在 O(n) 时间内完成吗&#xff1f; 示例&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2 int missingNumber(int* nums, int numsSize) {}分析 本题对…

25寒假算法刷题 | Day1 | LeetCode 240. 搜索二维矩阵 II,148. 排序链表

目录 240. 搜索二维矩阵 II题目描述题解 148. 排序链表题目描述题解 240. 搜索二维矩阵 II 点此跳转题目链接 题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到…

Vue3.0实战:大数据平台可视化(附完整项目源码)

文章目录 创建vue3.0项目项目初始化项目分辨率响应式设置项目顶部信息条创建页面主体创建全局引入echarts和axios后台接口创建express销售总量图实现完整项目下载项目任何问题都可在评论区,或者直接私信即可。 创建vue3.0项目 创建项目: vue create vueecharts选择第三项:…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.13 零拷贝技巧:as_strided的魔法与风险

2.13 零拷贝技巧&#xff1a;as_strided的魔法与风险 目录 #mermaid-svg-ieI7OVDIdPJxsrfJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ieI7OVDIdPJxsrfJ .error-icon{fill:#552222;}#mermaid-svg-ieI7OVDIdPJx…