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

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

时间:2023-05-11 19:37:01浏览次数:35  
标签:出售 int 一天 II 122 最佳时机 result ans prices

题目描述

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大利润 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii

该问题可以用两种方法进行解答:

1.动态规划

  每次遍历假设第 i 天为最后一天,那么对于最后一天而言,有两种情况:

  1. 价格 > 前一天出售价格,那么前天出售时间推迟到第 i 天(赚更多钱嘛),所以利润为上一次利润 + price[i]-price[i-1]
  2. 价格 <= 上一次出售价格,那么就直接出售咯.不然买进来就亏本了

   其实就是记录每一天作为最后一天的最大利润

  本质上就是记录每一个连续的最大增区间,所有连续增区间的和就是问题的解

 1 class Solution {
 2 public:
 3     //记录前一天的最高
 4     //动态规划:
 5     //分解:每一个作为最后一天加入,那么影响的就是最后一个解
 6     int maxProfit(vector<int>& prices) {
 7         int N = prices.size();
 8         vector<int>result(N);
 9         result[0] = 0;
10         for (int i = 1; i < N; ++i)
11         {
12             if (prices[i] > prices[i-1])
13                 result[i] = result[i-1] + prices[i] - prices[i-1];
14             else
15                 result[i] = result[i-1];
16         }
17         return result[N - 1];
18     }
19 };

 2.贪婪算法

  贪婪的思想就是能赚钱,我就买卖。这里可以理解为我当天卖出去,欸!我还能买进来,所以...(炒股吧家人们)

  • 只要有增,我每天都能赚钱
  • 不能增,我也不亏本
 1 class Solution {
 2 public: 4     
 6     int maxProfit(vector<int>& prices) {
 7         //贪婪算法求解
 8         int ans = 0, N = prices.size();
 9         for (int i = 1; i < N; ++i)
10         {
11             ans += max(0, prices[i] - prices[i - 1]);
12         }
13         return ans;
14     }
15 };

这里其实将问题转换为了当天卖当天买的问题,实际上也是如此。

 

标签:出售,int,一天,II,122,最佳时机,result,ans,prices
From: https://www.cnblogs.com/Kellen-Gram/p/17391928.html

相关文章

  • leetcode 1084 销售分析III
    leetcode1084销售分析IIIselectdistinctp.product_id,p.product_namefromProductpleftjoinSalessonp.product_id=s.product_idwheres.product_idnotin(selectproduct_idfromSaleswheresale_date<'2019-01-01'orsale_d......
  • AMD Xilinx AC701 单板运行IIC EEPROM例程
    概述AMDXilinxVitis内部集成了各种外设的例程,为工程师提供了快速上手的代码。AMDXilinx有很多开发板。各种单板的硬件参数不一定完全一致,有时需要根据单板硬件设计、Vivado中的BlockDesign设计,修改外设例程的参数。IICEEPROM例程更改。本文描述在AMDXilinxAC701单板运......
  • LeetCode 541. 反转字符串 II
    题目链接:LeetCode541.反转字符串II题意:给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。......
  • lxjc1228
    #include<stdio.h>#include<openssl/bn.h>intmain(){inti,j,flag;BIGNUM*prod=BN_new();BIGNUM*num=BN_new();BN_CTX*ctx=BN_CTX_new();//初始化prod为1BN_one(prod);for(i=2;i<=1000;i++){flag......
  • 代码随想录算法训练营第七天 | 454.四数相加II 、383.赎金信 
    ......
  • Visual Studio 2022 设置 IIS Express 运行在 32 位模式
    当:1、在VisualStudio2022中开发需要访问Access数据库的网站项目时,遇到错误:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。2、在VisualStudio2022中开发需要访问SQLite数据库的网站项目时,遇到错误:未能加载文件或程序集“System.Data.SQLite.DLL”或它的......
  • 121. 买卖股票的最佳时机
    class Solution {public:    int maxProfit(vector<int>& prices) {        int buy=prices[0],n=prices.size(),res=0;//记录最小值        for(int i=1;i<n;i++)//枚举第几天卖出        {            res=max(res,prices......
  • 2021 Summer Petrozavodsk Camp, Day 3 IQ test (XXII Open Cup, Grand Prix of IMO)
    AND先看最小值是不是所有的子集,如果不是就无解,否则把剩下的中间塞一个最小值就好了。submissionMath移项,平方差变成\(a_j=(k-a_i)(k+a_i)\),爆枚\(k-a_i\)和\(k+a_i\)就是\(O(A\lnA)\)的。submissionFancyFormulas首先我们发现操作不改变\((a+b)\bmodp\),因此如果......
  • IIS启动应用程序池报错"服务无法在此时接受控制信息"
    https://www.cnblogs.com/yaotome/p/9540300.html网站突然打不开,重新生成程序不行,重新打开vs也不行,重启了网站还是不行,重启应用池就发现问题了。可以关,启不来了,也删不掉,提示“服务无法在此时接受控制信息”。用下面方法解决了。用管理员方式打开命令行输入命令netsh winsock ......
  • 解决MVC4发布在IIS7后,路径无法访问.apk文件的解决方法
    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件,那么怎么才能让IIS支持.apk文件的下载呢?IIS服务器不能下载.apk文件的原因:iis的默认MIME类型......