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

相关推荐
逆向菜鸟6 分钟前
【摧毁比特币】椭圆曲线象限细分求k-陈墨仙
python·算法
DolphinDB14 分钟前
DolphinDB 回测插件快速上手
算法
利刃大大32 分钟前
【动态规划:路径问题】最小路径和 && 地下城游戏
算法·动态规划·cpp·路径问题
武大打工仔1 小时前
用 Java 复现哲学家就餐问题
算法
要做朋鱼燕1 小时前
【数据结构】用堆解决TOPK问题
数据结构·算法
秋难降2 小时前
LRU缓存算法(最近最少使用算法)——工业界缓存淘汰策略的 “默认选择”
数据结构·python·算法
CoovallyAIHub3 小时前
线性复杂度破局!Swin Transformer 移位窗口颠覆高分辨率视觉建模
深度学习·算法·计算机视觉
点云SLAM4 小时前
Eigen中Dense 模块简要介绍和实战应用示例(最小二乘拟合直线、协方差矩阵计算和稀疏求解等)
线性代数·算法·机器学习·矩阵·机器人/slam·密集矩阵与向量·eigen库
renhongxia14 小时前
大模型微调RAG、LORA、强化学习
人工智能·深度学习·算法·语言模型