首页 > 其他分享 >力扣 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II

力扣 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II

时间:2023-04-11 12:34:20浏览次数:49  
标签:买卖 cur int II 最佳时机 买入 prices prev 利润

121. 买卖股票的最佳时机

给定一个数组 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。

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

题解

 遍历元素看,使用变量prev记录遍历到的元素中的最小值

  • 如果prev>prices[i],则更新最小值
  • 否则,计算当前元素和prev之间的利润差值
查看代码
 class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res=0;
        int prev=100000;//记录前面的最小值

        for(int i=0;i<prices.size();++i){
            if(prev>prices[i]){//更新最小值
                prev=prices[i];
            }
            else{
                res=res>prices[i]-prev?res:prices[i]-prev;//计算利润差值
            }
        }
        return res;
    }
};

122. 买卖股票的最佳时机 II

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

示例 1:

输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。
     总利润为 4 + 3 = 7 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
     总利润为 4 。

示例 3:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。

提示:

  • 1 <= prices.length <= 3 * 104
  • 0 <= prices[i] <= 104

题解

和上题的区别是可以反复买入卖出,但是一个时间只能拥有不超过一只股票。

 结合上题,用prev记录买入点的价格,初始为prices[0]cur记录卖出和买入的最大差价,sum累计总利润。遍历元素,当前元素下标i,比较当前元素和上一个元素。

  • 当前元素比较大:prices[i]>prices[i-1],说明可以卖,计算当前卖了最大利润,如果此刻利润比上一次得到的cur大,更新curcur=cur>prices[i]-prev?cur:prices[i]-prev
  • 当前元素比较小,说明当前的股票可以买入了,而之前买入的股票必须先卖出,因此sum累计最大差价cur,然后复位cur=0,再买入当前股票,prev=prices[i];

另外,为了处理prices单调递增的情况,给其末尾加上元素0,保证可以进入当前元素比较小的逻辑中。

查看代码
 class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int sum=0;
        int cur=0;//记录前面的最小值
        int prev=prices[0];
        prices.emplace_back(0);//处理单调递增
        for(int i=1;i<prices.size();++i){
            //后一个比较大,可以卖,计算当前卖了最大利润 
            if(prices[i]>prices[i-1]){
                cur=cur>prices[i]-prev?cur:prices[i]-prev;
            }
            //后一个比较小,必须卖,累计最大利润,记录新的买入点prev
            else
            {
                sum+=cur; //累计
                cur=0;//恢复cur
                prev=prices[i];   
            }
        }
        return sum;
    }
};

 

标签:买卖,cur,int,II,最佳时机,买入,prices,prev,利润
From: https://www.cnblogs.com/fudanxi/p/17305693.html

相关文章

  • IIS 超时时间
    IIS超时时间原文链接:https://www.bbsmax.com/A/MAzAr6K1J9/asp.net默认的sessionstate模式是inproc(进程内),数据是在网站的应用程序池里面保存的。这样在web.config设置的超时时间,是在应用程序池没有发生回收的基础上才是有效的。这样就出现了问题,为什么应用程序池会发......
  • IIS Session设置超时时间
    IISSession设置超时时间原文链接:https://blog.csdn.net/zhoudong850/article/details/123274185在IIS发布网站后,网站登录每隔20分钟就会退出登录。可以通过IIS进行设置。1、进入IIS应用程序池,选择相关的网站的程序池。2、右键“高级设置”,选择“进程模型”下的“闲时超......
  • PCIE&IIC 基本概念&图解串行通信协议
       rootcomplex是一切的根,向下生长的是pcie链路      PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。由Intel在2001年的IDF上提出,由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力......
  • VS2013关闭调试而不关闭IIS Express
    在VS主面板打开:工具->选项->调试->编辑继续   取消选中[启用"编辑并继续"] 就OK了(英文版的请对应相应的操作)不过这是针对所有的调试,如果你想针对单个项目就还是保留VS的设置,直接去项目属性里设置在你的Web项目上右键->属性->Web 取消选中[启用"编辑并继续"] 就OK了......
  • piix4_smbus : SMBus Host Controller not enabled,虚拟机无法启动
    昨晚准备开着虚拟机继续跑数据,结果发现虚拟机直接不开机了,显示piix4_smbus:SMBusHostControllernotenableddf-h,看各个分区的情况,/目录下占用率为100%,突然想起来在VMWARE内扩容并不会影响分区的大小,还需要进行分配,但现在肯定分配不了,直接开不了机了解决:重启虚拟机,长按shi......
  • 部署IIS后访问共享文件失败
      在本地调试时没有问题,但是部署到IIS后操作共享文件的时候失败,压根找不到目录。在和共享文件服务器已经建立连接的情况下,本地调试通过的情况,猜测应该是部署后权限出现了问题,IIS的权限不够导致的。尝试了以下几种方法,我用第三种方法可行,可能因为我这边是内网环境,环境不同处......
  • 1140. 石子游戏 II
    题目链接:1140.石子游戏II方法一:dfs(超时)解题思路题目要求\(Alice\)取得的石子数尽可能的多,那么就要使得\(Bob\)取得的石子尽可能的少,但是\(Bob\)也想要取得更多的石子,因此\(Alice\)在每次选取时,要使得在此种选取方法下,\(Bob\)能取的石子数最小。现定义\(dfs(idx,m)\)表示从......
  • 股票买卖模型
    股票买卖模型题目描述给定一个长度为\(N\)的数组,数组中的第\(i\)个数字表示一个给定股票在第\(i\)天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。输入格式第一行包含整数\(N......
  • 26. 删除有序数组中的重复项 & 80. 删除有序数组中的重复项 II
    力扣题目链接(26)给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重......
  • IIS 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler
    https://www.cnblogs.com/skylaugh/p/6376426.html我运行在iis中配置的那个网站后,报错:错误代码0x800700b7配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节 这个问题原因在于window7的IIS默认用的是ASP.NETv4.0应用程序池。解决方法:把这......