剑指offer(C++)-JZ63:买卖股票的最好时机(一)(算法-动态规划)

简介: 剑指offer(C++)-JZ63:买卖股票的最好时机(一)(算法-动态规划)

题目描述:

假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益


1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天


2.如果不能获取到任何利润,请返回0


3.假设买入卖出均无手续费


数据范围:0≤n≤10^5,0≤val≤10^4


要求:空间复杂度 O(1),时间复杂度 O(n)

示例:

输入:

[8,9,2,5,4,7,1]


返回值:

5


说明:

在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。

解题思路:

本题是动态规划的经典题目。解题思路如下:


1.定义一个多行两列的数组。第一列存储,截止到第i天时股票不持股能达到的最大收益;第二列存储,截止到第i天时股票持股能保持的最大收益。


2.第一天无法卖出,因为没有持股,所以dp[0][0]自然是0,若第一天买入,则收益就是负当天的股价。


3.从第二天开始到最后一天,循环刷新截止到某一天时最大的收益情况。


4.第i天不持股的最大收益由两个情况决定:一是第i-1天不持股的最大收益,如果该值较大,说明在前面已经完成了较优的交易;二是第i-1天持股的最大收益,在第i天卖出了,进入不持股状态,此时如果卖出的金额比之前买入的金额大,那么该值为正,如果该值较小,说明虽然完成了低买高卖的操作,但是收益并不如之前的某个操作。


5.第i天持股的最大收益由两个情况决定:一是第i-1天持股的最大收益,如果该值较大,说明前面已经拿到了较便宜的筹码;二是第i天股价的负值,说明在当天进行了买入。


6.题目的结果就是数组中最后一行第一列的数值,也就是最后一天不持股能达到的最大收益。

测试代码:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int size = prices.size();
        // dp为多行两列的数组
        // 第一列表示股票不持股能达到的最大收益
        // 第二列表示股票持股能保持的最大收益
        vector<vector<int>> dp(size, vector<int>(2, 0));
        // 第一天无法卖出,因为没有持股
        dp[0][0] = 0;
        // 第一天买入股票,进入持股状态,收益为减去当天股价
        dp[0][1] = -prices[0];
        // 动态规划刷新第二天至最后一天的结果
        for(int i = 1; i < size; ++i){
            // 第i天不持股的最大收益由两个情况决定:
            // 一是第i-1天不持股的最大收益,如果该值较大,说明已经完成了较优的交易
            // 二是第i-1天持股的最大收益,在第i天卖出了,进入不持股状态,
            // 此时如果卖出的金额比之前买入的金额大,那么该值为正,后续
            // 除非有更大的买卖差值,否则该值不会刷新
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);
            // 第i天持股的最大收益由两个情况决定:
            // 一是第i-1天持股的最大收益,如果该值较大,说明前面已经拿到了较便宜的筹码
            // 二是第i天股价的负值,说明在当天进行了买入
            dp[i][1] = max(dp[i - 1][1], -prices[i]);
        }
        // 最后一天不持股能达到的最大收益就是最优结果
        return dp[size - 1][0];
    }
};


相关文章
|
1月前
|
运维 监控 算法
解读 C++ 助力的局域网监控电脑网络连接算法
本文探讨了使用C++语言实现局域网监控电脑中网络连接监控的算法。通过将局域网的拓扑结构建模为图(Graph)数据结构,每台电脑作为顶点,网络连接作为边,可高效管理与监控动态变化的网络连接。文章展示了基于深度优先搜索(DFS)的连通性检测算法,用于判断两节点间是否存在路径,助力故障排查与流量优化。C++的高效性能结合图算法,为保障网络秩序与信息安全提供了坚实基础,未来可进一步优化以应对无线网络等新挑战。
|
1月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
65 15
|
1月前
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
11天前
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
31 4
|
21天前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
37 8
|
2月前
|
存储 算法 Java
算法系列之动态规划
动态规划(Dynamic Programming,简称DP)是一种用于解决复杂问题的算法设计技术。它通过将问题分解为更小的子问题,并存储这些子问题的解来避免重复计算,从而提高算法的效率。
89 4
算法系列之动态规划
|
2月前
|
存储 监控 算法
员工屏幕监控系统之 C++ 图像差分算法
在现代企业管理中,员工屏幕监控系统至关重要。本文探讨了其中常用的图像差分算法,该算法通过比较相邻两帧图像的像素差异,检测屏幕内容变化,如应用程序切换等。文中提供了C++实现代码,并介绍了其在实时监控、异常行为检测和数据压缩等方面的应用,展示了其实现简单、效率高的特点。
71 15
|
2月前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
77 12
|
2月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
39 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
3月前
|
负载均衡 算法 安全
探秘:基于 C++ 的局域网电脑控制软件自适应指令分发算法
在现代企业信息化架构中,局域网电脑控制软件如同“指挥官”,通过自适应指令分发算法动态调整指令发送节奏与数据量,确保不同性能的终端设备高效运行。基于C++语言,利用套接字实现稳定连接和线程同步管理,结合实时状态反馈,优化指令分发策略,提升整体管控效率,保障网络稳定,助力数字化办公。
87 19

热门文章

最新文章