【DP】剑指offer63:股票的最大利润(121.买卖股票的最佳时机)

买卖股票的最佳时机(动态规划解法) 剑指 Offer 63. 股票的最大利润 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 解 阅读详情

力扣188(注意:本题与主站 121 题相同:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/)
动态规划思路:https://leetcode.cn/problems/gu-piao-de-zui-da-li-run-lcof/solutions/192221/mian-shi-ti-63-gu-piao-de-zui-da-li-run-dong-tai-2/

在这里插入图片描述

Python

class Solution:
    def bestTiming(self, prices: List[int]) -> int:
        profit = 0
        min_price = inf
        for tmp_price in prices:
            profit = max(profit, tmp_price - min_price)
            min_price = min(min_price, tmp_price)
        
        return profit

Java

class Solution {
    public int bestTiming(int[] prices) {
        int cost = Integer.MAX_VALUE, profit = 0;
        for(int price : prices) {
            cost = Math.min(cost, price);
            profit = Math.max(profit, price - cost);
        }
        return profit;
    }
}

方法1

class Solution {
    public int bestTiming(int[] prices) {
        int size = prices.length;
        if (size < 2) {
            return 0;
        }
        int[] dp = new int[size];         // dp[i]第i天操作可以获取的最大利润
        dp[0] = 0;
        dp[1] = prices[1] - prices[0];
        int max = Math.max(dp[0], dp[1]);
        for (int i = 2; i < size; ++i) {
            int diff = prices[i] - prices[i - 1];
            dp[i] = Math.max(diff + dp[i - 1], diff); // 卖 与 不卖 取较大值
            max = Math.max(max, dp[i]);
        }

        return max;
    }
}

方法2

找最小最大点,好方法!

// 版本1
class Solution {
    public int bestTiming(int[] prices) {
        if (prices.length < 2) {
            return 0;
        }
        int res = 0, minVal = prices[0];
        for (int i = 1; i < prices.length; ++i) {
            minVal = prices[i - 1] < minVal ? prices[i - 1] : minVal;
            res = res > prices[i] - minVal ? res : prices[i] - minVal;
        }

        return res;
    }
}

// 版本2
class Solution {
    
    public int bestTiming(int[] prices) {
        int min = Integer.MAX_VALUE;
        int max = 0;
        for(int i = 0;i<prices.length;i++){
            min = Math.min(prices[i],min);
            max = Math.max(max,prices[i]-min);
        }
        return max;
    }
}
告别‘线束丛林’:手把手拆解车身域控制器(BCM/PEPS/网关)的硬件选型与PCB布局要点 本文深入解析车身域控制器的硬件选型与PCB布局要点,涵盖主控MCU选择、通信接口设计、电源架构优化及EMC设计等关键环节。通过实战案例分享,帮助工程师解决高密度集成带来的电源完整性、热管理和信号隔离挑战,实现更稳定高效的汽车电子系统设计。 阅读详情

相关推荐

[Linux]双网卡 CentOS 系统中指定网络请求走特定网卡的配置方法

本文详细介绍了在双网卡CentOS系统中指定特定域名/IP通过指定网卡传输流量的方法。核心步骤包括:1)确认网卡信息(ip addr)和域名IP解析(nslookup);2)添加临时路由(ip route add);3)持久化配置(创建route-eth1文件);4)验证配置(ip route show和curl测试)。文章还提供了网关查询、路由删除等常见问题的解决方法,并区分了不同CentOS版本重启网络服务的命令差异。通过合理配置路由规则,可实现流量的定向传输需求。

wingaso的博客 1571

leetcode *剑指 Offer 63. 股票的最大利润 & 121. 买卖股票的最佳时机(2020.3.9)

【题目】 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 ...

Sophia_fez的博客 904

【电磁场与电磁波课程设计】基于HFSS的双频微带天线仿真及设计

第五代移动通信技术(5G)的商用已经近在眼前,作为移动通信中最为重要的功能组件,面向5G通信应用的手机天线与基站天线的技术研究与设计成为近年来的热点。随着移动通信中“跳频”“扩频”等通信技术发展,为了满足与多个终端的通信要求,实现多系统共用和收发共用等功能,这就要求天线在不同频段下工作。根据国家工信部的最新规定,5G移动通信的中频段被划定在3.3 GHz-3.5 GHz及4.8 GHz-5.0 GH,面向5G移动通信的天线应具有高增益、小型化、宽频段及高隔离度等技术特征,以满足5G通信的高传输速率、波束智能

weixin_44450575的博客 1万+

剑指 Offer 63. 股票的最大利润

剑指 Offer 63. 股票的最大利润 - 力扣(LeetCode) 类似题:LeetCode第 121 题:买股票的最佳时机(C++)_zj-优快云博客 o(n^2)的dp,思路很直接,但是最后一个测试用例超时了: class Solution { public: int maxProfit(vector<int>& prices) { if(prices.empty()) return 0; vector<int> dp(pr

zj 216

从IMC层到应力点:手把手教你用SEM/EDS给BGA焊点做一次‘体检’

本文详细介绍了如何使用SEM/EDS技术对BGA焊点进行全面失效分析,从样品制备到SEM观察、EDS分析,再到综合诊断,手把手教你识别焊点的微观特征和成分异常。文章特别强调了IMC层分析在BGA焊接失效诊断中的关键作用,并提供了实用的实验室技巧和常见失效模式对照表,帮助工程师快速定位问题根源。

weixin_42685438的博客 379

R分析|怎么样使用piecewiseSEM构建结构方程模型?保姆级教程

计算科学的发展让我们有了更先进的工具揭示自然规律。结构方程模型(SEM)已被广泛应用于多学科进行数据挖掘。其中在R中实现的结构方程模型是方便快捷的。今天要介绍的piecewiseSEM包就是R中实现SEM的一种方式。piecewiseSEM被开发出来主要目的是为了解决复杂模型简化后进行分段分析。个人认为最大的特点是更灵活,且采用的是原始数据,并不是传统的协方差矩阵。其次,将SEM破碎化为多个独立的方程,对样本量要求较少。

weixin_46814750的博客 6927

LeetCode & 剑指Offer:一文详解六道股票问题(买卖股票的最佳时机)--动态规划

介绍: 股票问题一共有六道:买卖股票的最佳时机(I,II,III,IV)、含冷冻期、含手续费。本次解析还包括一道面试题:面试题63. 股票的最大利润(即买卖股票的最佳时机I) 股票问题的方法就是 动态规划,因为它包含了重叠子问题,即买卖股票的最佳时机是由之前买或不买的状态决定的,而之前买或不买又由更早的状态决定的… LeetCode 121 :买卖股票的最佳时机I 给定一个数组,它的第 i 个元素...

Tiger数学之家的博客 1130

Matlab Robotics Toolbox实战:四自由度机械臂建模与仿真全流程(附代码)

本文详细介绍了使用Matlab Robotics Toolbox进行四自由度机械臂建模与仿真的全流程,包括DH参数定义、模型构建、可视化、运动学仿真及交互控制。通过实战案例和代码示例,帮助读者快速掌握机械臂建模技巧,提升机器人学习效率。

weixin_42538752的博客 415

剑指offer.63题 股票的最大利润 经典dp问题求解与优化

文章目录一、题目描述二、贪心法三、动态规划方法四、状态转移方程的优化 一、题目描述 本文所讲解的是剑指offer第63题——股票的最大利润,本题是一个经典的dp动态规划问题。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖 出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2: 输入: [7,6,4,3,1] 输出: 0 解释: 在这

qq_42833339的博客 436

最全的Hermes安装教程以及Hermes WebUI安装部署和配置指南

* 直接执行命令**

小石头的专栏 1074

基于 YOLOv8 的自动驾驶车辆障碍物检测与避障路径规划

本文探讨基于YOLOv8的自动驾驶车辆障碍物检测与避障路径规划系统。在感知层面,采用YOLOv8模型实现多类别障碍物识别,结合单目视觉距离估计和ByteTrack多目标跟踪算法,完成障碍物的稳定检测与运动状态估计。在路径规划层面,设计分层规划架构,融合全局路径规划与局部避障算法,重点实现Frenet坐标系下的采样优化算法和基于模型预测控制的实时避障轨迹生成。通过完整的代码实现与仿真实验,验证系统在复杂交通场景下的有效性与实时性,为自动驾驶开发者提供从理论到实践的完整技术参考。 关键词:YOLOv8;自动驾驶

huanghm88的专栏 248

剑指offer第63题 股票的最大利润(动态规划)

文章目录问题描述:解题思路:代码实现: 问题描述: 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完

覃会程的博客 453

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读者其采用UG NX二次开发(C++)时,遇到“库缺少需要的入口点”这个问题,看了一下他发给我的源代码,感觉有必要讲一下UG NX二次开发(C++)遇到此类问题的可能情况与解决方法。自然,这是博主的经验之谈,有不足之处还请在评论区讨论。

GimiGimmy 2201

剑指 Offer 63. 股票的最大利润 & 121. 买卖股票的最佳时机

题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof 著作权归领扣网络所有。 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6

马金波 226

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

剑指 Offer(第2版)面试题 63:股票的最大利润

剑指 Offer(第2版)面试题 63:股票的最大利润

ProgramNovice的博客 549

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

剑指 Offer 63. 股票的最大利润 / LeetCode 121. 买卖股票的最佳时机(动态规划 / 滑动窗口)

难度:中等给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。

WorldMaya的博客 535

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

剑指Offer63:股票的最大利润(Java)

题目描述: 解题思路:     这道题可以用动态规划的方法去求最大利润。首先定义一个dp数组存放利润。假设第一天买进,因为第一天买进不卖出,所以利润为0,即dp[0] = 0;设置一个min表示最小值,因为只有设置最小值,我们才知道什么时候买进是最低价。思路是:今天卖出的利润和前一天卖出的利润进行比较,哪个利润大就存储哪天的利润。返回最后一天的利润就是股票的最大利润。 代码实现: class Solution { public int maxProfit(int[] prices) {

程序猿小龙的博客 495

剑指offer面试题63(java版):股票的最大利润

welcome to my blog 剑指offer面试题63(java版):股票的最大利润 思路 从头开始遍历, 记录遍历过程中的最小值, 同时计算并更新arr[i] - min的最大值 感觉很简单, 其实还是要巩固自己的思路, 比如明确每次for循环在做什么: 计算卖出价为arr[i]时能够获得的最大利润 public int MaxDiff(int[] arr){ //input...

littlehaes的博客 751

【剑指Offer系列63】股票的最大利润

文章目录题目代码PythonC++ 题目 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 限

小陈说CV的博客 194

剑指offer63. 股票最大利润 P304

剑指offer63. 股票最大利润 P304 题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5,7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。 不同条件的股票问题在leetcode 上有大神做了详细的对比总结,参考: https:...

lonelyVM的博客 292

股票的最大利润(剑指 Offer 63)

股票的最大利润(剑指 Offer 63) 1 题目描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 最大利润 = 6-1 = 5 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 2 思路分析 使用暴力法第一份层循环指向买的一天,第二层循环一次遍历以后的每一天找到利润最大的一次交易可得时间复杂度

input_out的博客 613
上一篇: 剑指offer47_new:珠宝的最高价值
下一篇: 【重点】【LCA】剑指offer68:二叉树最近公共祖先|235. 二叉搜索树的最近公共祖先
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值