Ⅰ.

给定一个数组 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]买卖股票相关推荐

  1. leetcode买卖股票问题(思路、方法、code)

    一文解决Leetcode买卖股票问题 对于前3个问题,均采用了比较巧妙的解法.由于第4个问题具有非常强的泛型,因此采用了DP,第4个问题的dp如果理解的话,实际上只需要稍加修改状态便可以用该dp思路应 ...

  2. 聊聊买卖股票的最佳时机

    前言 大家好,我是大赛哥,好久不见,天天想念! 最近梳理高频动态规划问题,股票问题当然是非常经典的动态规划问题,并且整个系列有好几道题,这里我整理了6道股票系列的经典问题分享给大家,咱们今天聊聊买卖股 ...

  3. 牛客题霸 [买卖股票的最好时机] C++题解/答案

    买卖股票的最好时机 题解: 设两个变量,一个为minn,一个为maxx 当遇到比当前minn还小的价钱时,就更新minn 当与minn大时,就计算如果这个价卖出,赚多少钱,maxx不断更新取最大值 这 ...

  4. lintcode:买卖股票的最佳时机 III

    买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...

  5. Leetcode-数据结构-121. 买卖股票的最佳时机

    问题: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票. 设计一 ...

  6. LintCode 买卖股票的最佳时机I II III IV

    今天我做了LintCode上的买卖股票系列题目.总共4道题目,主要使用了动态规划的方法,在此写出我的代码和思路以便交流和回顾. 1.假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你 ...

  7. 123. 买卖股票的最佳时机 III ( 三维dp )

    LeetCode:123. 买卖股票的最佳时机 III 之前的含手续费定义了两个状态(持股与不持股), 含冷冻期定义了三个状态(持股, 不持股冷冻期, 不持股非冷冻期), 都是二维数组. 本题除了持股 ...

  8. 30、买卖股票的最好时机

    买卖股票的最好时机(一) 描述 假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一次股 ...

  9. LintCode领扣算法问题答案:149. 买卖股票的最佳时机

    149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...

最新文章

  1. php解析QQmv直链,网易云音乐直链解析API源代码^-^
  2. Golang中常用的并发模型
  3. JAVA链表返回子表_基于java的链表反转
  4. HOW TO ORDER LFT
  5. nginx模块定制开发中介入http模块的方法及NGX_HTTP_CONTENT_PHASE阶段的详细介绍
  6. Lolipa魔方财务主题-虚拟主机源码
  7. 布隆过滤器及其数学推导
  8. java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
  9. 关于CSDN怎么获得积分和C币的方法
  10. 毕设-基于SSM高校后勤管理系统
  11. 从零开始配置 vim(3)—— 键盘映射进阶
  12. Vmware安装Vmware Tools工具
  13. Adobe dreamweaver CS6小白入门教程
  14. 高数篇:06零点问题与微分不等式
  15. XDD QQ机器人修复方案
  16. Social Recommendation with Strong and Weak Ties 学习笔记
  17. Java 将两个日期的时间段按照一定天数进行周期切割
  18. DB2控制中心菜单中文乱码问题
  19. 在电脑端微信或低版本ios,使用微信自带浏览器打开网页不显示
  20. 手把手教你webpack3(14)HMR模块热加载

热门文章

  1. 2022年自考专业考试(公关关系)国际公共关系练习题
  2. C# 设计模式:行为型
  3. 为什么企业选择长期发布新闻稿?
  4. Android grade语法,多渠道打包
  5. 网易如何服务器物品叠加,网易buff怎么把物品放到buff背包 | 手游网游页游攻略大全...
  6. C++ string获取文件路径文件名、文件路径、文件后缀(两种方式)
  7. 熊猫数据集_在日常生活中使用熊猫数据框
  8. 多实例数据库应用PSU
  9. 为什么我们缺少特立独行的人生态度
  10. mysql mapper配置模糊查询_Mybatis各种模糊查询