算法打卡7

买股票的最佳时机1(c++):

法一(双指针):设出两个指针,一个快指针,一个慢指针。利润只能快指针减慢指针(即后一个减前一个),用for循环遍历所得利润,判断利润大小,找出最大利润,输出即可。

法二(一次遍历):设出一个最低价格,且其范围为1e9(即等于它,足够大即可),还要设出最大利润,给予其初始值为0,表示出数组长度。用for循环遍历整个数组,最大利润等于最大利润与遍历数组中的元素减去最低价格的值中较大的一个;最低价格等于遍历数组元素与最低价格中较小的一个。直至循环结束,输出最大利润即可

我:当我看过题目后,知道这个题要得到的是一个最大利润。我原来也是想用一快一慢指针来得利润,先找出这组数中的最小值,然后储存其位置坐标,找到其后最大值,再让两个相减即可。但我发现我不会储存它们原来的位置。看了题解,就发现并没有我想象的那么麻烦,只要另利润等于后一个减前一个,再找出最大的利润即可。

买股票的最佳时机2(c++):

法一(贪心):设出最大利润并赋予其初始值为0,表示出数组长度值。用for循环遍历数组,令最大利润等于数组中后一元素减前一元素,只要利润大于0的,都加起来。循环完,输出加起来的和即可。

我:看过题目后,我发现它比上一题更复杂了,我的想法就只想在上一次想法的基础上再在它们之后找一对最大最小值相加减或算和?对比结果后,拿程序试试,无果。看了题解,发现我又想复杂了,原来题目所表意思即交易次数是无限的,所以所有日间差的值都是利润,它们之和即最大利润。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值