[C++ code]买卖股票
Ⅰ.
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
设置一个变量存储最小值minp,一个变量存储最大利润值res
prices[i]-minp表示minp时买入,prices[i]时卖出,所得的利润。
min | prices[i] | 7 | 1 | 5 | 3 | 6 | 4 |
minp | 0x3f3f3f3f | 7 | 1 | 1 | 1 | 1 | |
max | prices[i]-minp | 负值 | -6 | 4 | 2 | 5 | 3 |
res | 0 | 0 | 4 | 4 | 5 | 5 | |
minp | 7 | 1 | 1 | 1 | 1 | 1 |
class Solution
{
public:int maxProfit(vector<int>& prices){int minp = 0x3f3f3f3f;int res = 0;for(int i : prices){minp = min(minp,i);res = max(res,i-minp);}return res;}
};
Ⅱ.
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
示例 1:
输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
那就是!!如果第i+1天比第i天价高,则可赚,将差值加入最终利润中;否则赔钱,不加入最终利润(可以理解为最终利润加0)
class Solution
{
public:int maxProfit(vector<int> prices){int res;for(int i=1;i<prices.size();++i){res+=max(0,prices[i]-prices[i-1]);}return res;}}
Ⅲ.
- 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
输入: prices = [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();int dp[n][2]; // dp[i][0] 表示在i天结束时,此时已不持有股票的收益// dp[i][1] 表示在i天结束时,此时持有股票的收益dp[0][0] = 0; // 第一天没买的的话,那么收益就是0dp[0][1] = -prices[0]; // 第一天买的话,没卖出去那么收益就是成本,即为买入价if(n > 1){dp[1][0] = max(dp[0][0] , (prices[1] + dp[0][1]));dp[1][1] = max(dp[0][1] , dp[0][0] - prices[1]);for(int i = 2 ; i < prices.size(); i++){dp[i][0] = max(dp[i-1][0] , (prices[i] + dp[i-1][1]));dp[i][1] = max((dp[i-2][0] - prices[i]) , dp[i-1][1]); }}return dp[n-1][0];}
};
[C++ code]买卖股票相关推荐
- leetcode买卖股票问题(思路、方法、code)
一文解决Leetcode买卖股票问题 对于前3个问题,均采用了比较巧妙的解法.由于第4个问题具有非常强的泛型,因此采用了DP,第4个问题的dp如果理解的话,实际上只需要稍加修改状态便可以用该dp思路应 ...
- 聊聊买卖股票的最佳时机
前言 大家好,我是大赛哥,好久不见,天天想念! 最近梳理高频动态规划问题,股票问题当然是非常经典的动态规划问题,并且整个系列有好几道题,这里我整理了6道股票系列的经典问题分享给大家,咱们今天聊聊买卖股 ...
- 牛客题霸 [买卖股票的最好时机] C++题解/答案
买卖股票的最好时机 题解: 设两个变量,一个为minn,一个为maxx 当遇到比当前minn还小的价钱时,就更新minn 当与minn大时,就计算如果这个价卖出,赚多少钱,maxx不断更新取最大值 这 ...
- lintcode:买卖股票的最佳时机 III
买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...
- Leetcode-数据结构-121. 买卖股票的最佳时机
问题: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票. 设计一 ...
- LintCode 买卖股票的最佳时机I II III IV
今天我做了LintCode上的买卖股票系列题目.总共4道题目,主要使用了动态规划的方法,在此写出我的代码和思路以便交流和回顾. 1.假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你 ...
- 123. 买卖股票的最佳时机 III ( 三维dp )
LeetCode:123. 买卖股票的最佳时机 III 之前的含手续费定义了两个状态(持股与不持股), 含冷冻期定义了三个状态(持股, 不持股冷冻期, 不持股非冷冻期), 都是二维数组. 本题除了持股 ...
- 30、买卖股票的最好时机
买卖股票的最好时机(一) 描述 假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一次股 ...
- LintCode领扣算法问题答案:149. 买卖股票的最佳时机
149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...
最新文章
- php解析QQmv直链,网易云音乐直链解析API源代码^-^
- Golang中常用的并发模型
- JAVA链表返回子表_基于java的链表反转
- HOW TO ORDER LFT
- nginx模块定制开发中介入http模块的方法及NGX_HTTP_CONTENT_PHASE阶段的详细介绍
- Lolipa魔方财务主题-虚拟主机源码
- 布隆过滤器及其数学推导
- java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
- 关于CSDN怎么获得积分和C币的方法
- 毕设-基于SSM高校后勤管理系统
- 从零开始配置 vim(3)—— 键盘映射进阶
- Vmware安装Vmware Tools工具
- Adobe dreamweaver CS6小白入门教程
- 高数篇:06零点问题与微分不等式
- XDD QQ机器人修复方案
- Social Recommendation with Strong and Weak Ties 学习笔记
- Java 将两个日期的时间段按照一定天数进行周期切割
- DB2控制中心菜单中文乱码问题
- 在电脑端微信或低版本ios,使用微信自带浏览器打开网页不显示
- 手把手教你webpack3(14)HMR模块热加载
热门文章
- 2022年自考专业考试(公关关系)国际公共关系练习题
- C# 设计模式:行为型
- 为什么企业选择长期发布新闻稿?
- Android grade语法,多渠道打包
- 网易如何服务器物品叠加,网易buff怎么把物品放到buff背包 | 手游网游页游攻略大全...
- C++ string获取文件路径文件名、文件路径、文件后缀(两种方式)
- 熊猫数据集_在日常生活中使用熊猫数据框
- 多实例数据库应用PSU
- 为什么我们缺少特立独行的人生态度
- mysql mapper配置模糊查询_Mybatis各种模糊查询