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 的收益的交易,累加和就是答案。比一般的贪心绕了一点。我感觉。

相关推荐
梵刹古音1 小时前
【C语言】 字符数组相关库函数
c语言·开发语言·算法
wfeqhfxz25887827 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
Aaron15888 小时前
基于RFSOC的数字射频存储技术应用分析
c语言·人工智能·驱动开发·算法·fpga开发·硬件工程·信号处理
_不会dp不改名_10 小时前
leetcode_3010 将数组分成最小总代价的子数组 I
算法·leetcode·职场和发展
你撅嘴真丑11 小时前
字符环 与 变换的矩阵
算法
早点睡觉好了11 小时前
重排序 (Re-ranking) 算法详解
算法·ai·rag
gihigo199812 小时前
基于全局自适应动态规划(GADP)的MATLAB实现方案
算法
ctyshr13 小时前
C++编译期数学计算
开发语言·c++·算法
zh_xuan13 小时前
最小跳跃次数
数据结构·算法
yumgpkpm13 小时前
2026软件:白嫖,开源,外包,招标,晚进场(2025年下半年),数科,AI...中国的企业软件产业出路
大数据·人工智能·hadoop·算法·kafka·开源·cloudera