栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【每日一题】买卖黄金最佳策略(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【每日一题】买卖黄金最佳策略(C++)

今天参加爱德万测试公司的笔试,有一道编程题十分类似,具体题目稍后上传,先放出题解

7.10更新

题目大意翻译如下: 

黄金价格每天都会变动,黄金价格的走势如下图,如果你在day 0买入在day 2卖出,然后再在day 4买入在day 7卖出就可以挣得最大的利润。如果你在一个黄金价格走势单调递减的曲线图中买入,你不会有任何利润。

本题中买入和卖出可以有任意次数,但买入再到卖出的过程中间不能有任何买入(ps:这是我自己加的,题目中应该也隐含这个意思)

请设计程序输出最佳的策略。

可以直观地看到,只需要找到黄金价格开始上涨的最小值和黄金价格上涨到的最大值 ,在最小值点买入黄金并在最大值点卖出,计算这一段之间的差就是这段时间内股票的最大利润。最后只需要把所有上涨时间段内的利润累加起来就是要求的结果。贪心思想

但是这个区间很难划分,引用题解中大佬的解法来解释:

在这道题目中,只要是在上升的,我们就计算上升的增量,然后对所有增量进行累加,并不需要找到这段完整增量区间的最小值和最大值再来求差值。

我们结合图片来理解一下,当连续几天股价都在增长的情况下,可以看成在上升的第二个点,我先卖出再买入。连续下降的时候我就不买入,这一天我手中是没有股票的。


也可以结合数学公式来理解,在一段上升区间 a

我们只要把 prices 数组遍历一遍,并且在遍历的过程中用后一项减前一项,如果是正数则累加,负数则不加,得到 4+3=7。

int maxProfit(vector&prices){
        int total = 0;
        for(int i=0;i 

​​​​​​​LeetCode121&122.买卖股票的最佳时期(C++)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号