首页 > 编程语言 >算法练习-day38

算法练习-day38

时间:2023-08-07 15:37:13浏览次数:189  
标签:day38 int 股票 练习 算法 vector prices dp 利润

动态规划

121. 买卖股票的最佳时机

题意:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

实例:

算法练习-day38_动态规划

思路:本题的思路主要是通过两个

C++代码:

int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        dp[0][0]=-prices[0],dp[0][1]=0;
        for(int i=1;i<prices.size();i++)
        {
            dp[i][0]=max(dp[i-1][0],-prices[i]);
            dp[i][1]=max(dp[i-1][1],prices[i]+dp[i-1][0]);
        }
        return dp[prices.size()-1][1];
    }

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

题意:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

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

实例:

算法练习-day38_动态规划_02

思路:本题有两种思路,其一是贪心算法:我们只要将每次的正利润加在一起就可以得到整个周期中最大的利润;其二是动态规划:这个是解决股票问题这一系列的统一做法。该题目中我们可以在一个股票周期内多次买卖股票,因此我们今天的本金不是从0开始计算的,而是我们前一天的利润开始计算的,代码方面就和上一题几乎一样,只是在购入股票的持有上,不是从0开始,而是从利润-本次购买股票的金额开始计算

贪心算法代码:

    int maxProfit(vector<int>& prices) {
        int count=0;
        for(int i=0;i<prices.size()-1;i++)
        {
            if(prices[i]<prices[i+1])
            {
                count+=prices[i+1]-prices[i];
            }
        }
        return count;
    }

动态规划算法:

    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2,0));
        dp[0][0]=-prices[0];
        for(int i=1;i<prices.size();i++)
        {
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);
        }
        return dp[prices.size()-1][1];
    }

标签:day38,int,股票,练习,算法,vector,prices,dp,利润
From: https://blog.51cto.com/u_15209404/6994157

相关文章

  • Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)
    转:Redis精通系列——LFU算法详述(LeastFrequentlyUsed-最不经常使用)  ......
  • 代码随想录算法训练营第十一天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
    20.有效的括号    卡哥建议:讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。 大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。   题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%8......
  • 在开源项目中看到一个改良版的雪花算法,现在它是你的了。
    你好呀,我是歪歪。在Seata的官网上看到一篇叫做“关于新版雪花算法的答疑”的文章。http://seata.io/zh-cn/blog/seata-snowflake-explain.html看明白之后,我觉得还是有点意思的,结合自己的理解和代码,加上画几张图,给你拆解一下Seata里面的“改良版雪花算法”。虽然是在Se......
  • Java调度算法实现与应用(FCFS、SJF、RR、HPF)
    文章目录一、调度算法概述二、先来先服务(FCFS)算法1、概述2、Java实现FCFS3、优缺点三、短作业优先(SJF)算法1、概述2、Java实现SJF3、优缺点四、时间片轮转(RR)算法1、概述2、Java实现RR3、优缺点五、优先级调度(HPF)算法1、概述2、Java实现HPF一、调度算法概述调度算法常见于操作系统......
  • 文心一言 VS 讯飞星火 VS chatgpt (69)-- 算法导论6.5 8题
    八、HEAP-DELETE(A,i)操作能够将结点i从堆A中删除。对于一个包含n个元素的堆,请设计一个能够在O(lgn)时间内完成的HEAP-DELETE操作。文心一言:要在O(logn)时间内完成HEAP-DELETE操作,可以使用以下方法:1.首先找到要删除的节点i的父节点。可以从根节点开始,依次向上遍历,直......
  • C语言打卡练习Day4
    1.在一个有序数组中查找具体的某个数字。并将其下标打印出来intmain(){inti=0;intk=5;//要查找的数字intarr[]={1,2,3,4,5,6,7,8,9,10};intnum=sizeof(arr)/sizeof(arr[1]);for(i=0;i<num;i++){if(k==arr[i]){......
  • 计算机算法与程序设计(python) 第一章 编程作业
    计算机算法与程序设计(python)第一章 编程作业查看帮助返回所有测验,作业和考试都在2020年12月30日23点截止,请及时完成。编程作业题可以多次提交,取最高分作为本题成绩。 依照学术诚信条款,我保证此作业是本人独立完成的。温馨提示:1.本次作业属于OnlineJudge题目,提交后由系统即时判......
  • 【算法】用c#实现德州扑克卡牌游戏规则
    德州扑克是一种牌类游戏,可多人参与,它的玩法是,玩家每人发两张底牌,桌面依次发5张公共牌,玩家用自己的两张底牌和5张公共牌自由组合,按大小决定胜负。使用c#完成功能Hand()以返回手牌类型和按重要性递减顺序排列的等级列表,用于与同类型的其他手牌进行比较,即最佳手牌。可能的手牌按价......
  • 笔记 | Sort 的实现逻辑与排序算法
    一、SortSort()的功能是对数组元素就地进行排序,会改变数组本身(返回对象同数组的引用)。默认排序顺序是,先将元素转换为字符串后进行排序。有一个可选参数compareFunction定义排序顺序的函数。返回值应该是一个数字,其正负性表示两个元素的相对顺序。array.sort([compareFunct......
  • 【算法】组合数学初步
    参考资料OI-Wiki组合数学一、概念\(\dbinom{n}{m}\)表示从\(n\)个小球内拿\(m\)个的方案数,小球一样但顺序不一样算同一种方案,可用\(\dbinom{n}{m}=\frac{n!}{m!(n-m)!}\)计算,称为组合。\(A_n^m\)表示从\(n\)个小球内拿\(m\)个的方案数,小球一样但顺序不一样算不......