AcWing 1055. 股票买卖 II

文章目录

前言

继续写简单题。哈哈哈。

AcWing 1055. 股票买卖 II

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int a[N];
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int ans=0;
    for(int i=0;i<n-1;i++){
        ans+=max(0,a[i+1]-a[i]);
    }
    cout<<ans<<endl;
    return 0;
}

思路

这个是一个贪心题,就是求最大值,每一步选最优解。额我怎么知道会不会获利呢?假设原来的数组是上升的,那么就可以交易,假设不是上升的,我就不交易。这其实就相当于开挂了。但是我们需要知道现在自己能不能买得起这个股票。第一天应该是默认可以购买的。假设钱足够吗?是的,应该是假设钱足够,数字后面都没有带单位。

然后就是第二个样例,比较复杂。 1 2 3 4 5 ,最优解是 1 的时候买入,5 的时候卖出。也就是说最优解是在最小的时候买入,最大的时候卖出。但是我们怎么知道什么时候最大呢,或者说,不会存在其他情况累加之后比当前选择更优。有点想不清楚。

数据范围是十万,O(nlogn) 是可以接受的,排序,二分,是这个数据范围内比较常见的算法,还有一些其他的我都不太会,比较难的图论的一些模板算法,这里就不列举了。先了解简单的。

写不出来也比较正常。没考虑到一笔交易可以分解为每一天的交易,因为这个买卖股票是针对同一支股票来进行的。也就是说,比如说这个样例,1 2 3 4 5 ,我用 1 的价格买入,2 的价格售出,又用 2 的价格买入,用 3 的价格售出,用 3 的价格买入,用 4 的价格售出,用 4 的价格买入,用 5 的价格售出,这和我们最开始用 1 的价格买入,用 5 的价格售出的利润是相等的,拆解之后可以用贪心策略,就是每一天选择一个大于 0 的收益的交易,累加和就是答案。比一般的贪心绕了一点。我感觉。

相关推荐
To_OC5 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎6 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC6 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn7 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹7 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术8 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber10 小时前
检索技术的实际应用
人工智能·算法
hhzz11 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_12 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法