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

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘10 分钟前
菜鸟的算法基础
java·数据结构·算法
爪哇部落算法小助手27 分钟前
每日两题day65
数据结构·c++·算法
麒qiqi35 分钟前
【数据结构核心篇】树与哈希(Hash)的原理、特性及实战应用
数据结构·算法·哈希算法
ada7_38 分钟前
LeetCode(python)——543.二叉树的直径
数据结构·python·算法·leetcode·职场和发展
橘颂TA38 分钟前
【剑斩OFFER】算法的暴力美学——颜色分类
数据结构·c++·算法·动态规划
吴秋霖44 分钟前
profileData纯算逆向分析
算法·设备指纹·反爬虫技术
sprintzer1 小时前
11.26-12.05力扣栈刷题
算法·leetcode·职场和发展
sin_hielo1 小时前
leetcode 3578
数据结构·算法·leetcode
ShiMetaPi1 小时前
SAM(通用图像分割基础模型)丨基于BM1684X模型部署指南
人工智能·算法·ai·开源·bm1684x·算力盒子
前端小白在前进1 小时前
力扣刷题:无重复字符的最长子串
算法·leetcode·职场和发展