线性查找-股票最佳收益

本文探讨如何使用线性查找解决股票交易问题。第一题要求在只允许买入和卖出一次的情况下,找到最大收益。通过从左到右遍历数组,更新左侧最小值,可以找到最大差值。第二题放宽限制,允许多次交易,通过观察股票k线图,发现只需在每次价格上升的起点买入,在下降的起点卖出,即可获得最大收益。线性遍历即可解决这两个问题。
摘要由CSDN通过智能技术生成

题目一:已知一个整型数组,表示某只股票在每天的价格(假定每天价格保持一定,并且可买入可卖出),如果只允许买入一次卖出一次, 问最佳受益是多少?

这题跟数组最大距离恰成互补,这题简化之后就是 已知A[n], 问找到 j > i, 使得A[j] - A[i] 最大。(数组最大距离是 找到 A[j] > A[i], 使得 j-i 最大)

要求A[j] - A[i] 最大,我们如果以j从0起始遍历,无非就是让A[j] 跟左边元素中的最小值Lmin相比,显然Lmin可以在j遍历过程中不断更新,所以这里的线性查找就呼之欲出了。

int bestbuysellstock01(const int *A, int n, int& buy, int& sell){
    int min=0, maxDiff=0;
    buy = sell = 0;
    for(int i=1;i<n;++i){
        if(A[i] < A[min]){
            min = i;
        }else{
            int diff = A[i] - A[min];
            if(diff > maxDiff){
                maxDiff = diff;
                buy = min;
                sell = i;
            }
        }
    }
    return maxDiff;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值