题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

分析:暴力法:
如下图:


对于一个给定的股票每日价格数组,给出进行红圈黑线两次遍历。然后将其差值存入一个新的数组中,求出这个数组中的最大值。
如下代码:

#include <iostream>
#include <vector>using namespace std;class Solution {
public:int maxProfit(vector<int>& prices) {vector<int> resultV;for(int i = 0;i<prices.size();i++){for(int j=i+1;j<prices.size();j++){resultV.push_back(prices[j]-prices[i]);}}int max = -999;for (auto v : resultV){if (max < v) max = v;}if(max <= 0)return 0;elsereturn max;}
};int main()
{Solution way;vector<int> v = {6,5,4,3,2,1};cout<<way.maxProfit(v)<<endl;return 0;
}

优化方法二:
假设给定的数组为:[7, 1, 5, 3, 6, 4]

如果我们在图表上绘制给定数组中的数字,我们将会得到:

我们来假设自己来购买股票。随着时间的推移,每天我们都可以选择出售股票与否。那么,假设在第 i 天,如果我们要在今天卖股票,那么我们能赚多少钱呢?

显然,如果我们真的在买卖股票,我们肯定会想:如果我是在历史最低点买的股票就好了!太好了,在题目中,我们只要用一个变量记录一个历史最低价格 minprice,我们就可以假设自己的股票是在那天买的。那么我们在第 i 天卖出股票能得到的利润就是 prices[i] - minprice。

因此,我们只需要遍历价格数组一遍,记录历史最低点,然后在每一天考虑这么一个问题:如果我是在历史最低点买进的,那么我今天卖出能赚多少钱?当考虑完所有天数之时,我们就得到了最好的答案。
代码如下

class Solution {
public:int maxProfit(vector<int>& prices) {int inf = 1e9;int minprice = inf, maxprofit = 0;for (int price: prices) {maxprofit = max(maxprofit, price - minprice);minprice = min(price, minprice);}return maxprofit;}
};

leetcode刷题:121题stock相关推荐

  1. 《LeetCode刷题》—121. 买卖股票的最佳时机

    <LeetCode刷题>-121. 买卖股票的最佳时机 一.题目内容 原题连接:https://leetcode.cn/problems/best-time-to-buy-and-sell ...

  2. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串 22.4% 中等 10 正则表达式匹配 18.8% 困难 32 最长有效括号 23.3% 困难 44 通配符匹配 17.7% 困难 53 最 ...

  3. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  4. Leetcode刷题指南和top100题目

    原文链接:https://blog.csdn.net/qq_39521554/article/details/79160815 参考博文:https://blog.csdn.net/mmc2015/a ...

  5. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  6. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配 17.8% 困难 45 跳跃游戏 II 25.5% 困难 55 跳跃游戏 30.6% 中等 122 买卖股票的最佳时机 II C#LeetC ...

  7. LeetCode刷题笔记汇总

    LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...

  8. LeetCode刷题之T46全排列(中等)

    大家好,这次我们讲解的题目是LeetCode刷题之T46全排列(中等),话不多说,上题: 解题思路: 这道题的要用到回溯算法,而解决每一个回溯问题,实际上就是一个决策树的问题,不明白的话,我举个例子: ...

  9. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

  10. 个人LeetCode刷题记录(带题目链接及解答)持续更新

    Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...

最新文章

  1. loglevel python 不输出_Python 通过 Celery 框架实现分布式任务队列!
  2. 杨老师的新课!数学应用
  3. JAVA面试题(part2)--位运算符
  4. 福利 | 全网疯传免费领,一整套算法课程,拿走不谢!
  5. 为什么总是有人说Java啰嗦,却没人说C++啰嗦?
  6. bilibili有电脑版吗_哪个手机便签软件有电脑版?有跨平台的桌面便签软件吗 - 学显...
  7. mysql主主同步修复
  8. SpringMVC 中整合JSON、XML视图二
  9. JSF学习笔记--JSF简介,JSF第一个应用程序
  10. 工业机器人综合教学实训平台
  11. 台式计算机装机软件选择,装机软件哪个好?小编教你最好的装机软件推荐
  12. unity游戏开发之游戏过审后 国行PS4将在3月20日发售
  13. 鸡汤来喽游戏制作C++(demo版)
  14. ubuntu下使用netplan配置网络
  15. Git项目库删除找回
  16. 验证码图片显示不出文字
  17. 沈阳警方严查违法非法烟花爆竹 捣毁多处储存窝点
  18. 有创意的思维导图是怎样绘制的
  19. 怎样用html和图像制作代码,如何用HTML代码贴图
  20. 中文之星掌上狂拼手机输入法 v1.0 symbian版 绿色

热门文章

  1. thinkphp5.0验证码使用
  2. 基于Monte Carlo方法的2048 A.I.
  3. Salesforce 中获取数据表字段的 picklist 的值
  4. DriverMessageBean配置详解
  5. 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接
  6. pareto解是什么意思_Pareto是什么意思
  7. VUE---不连接后端的登录验证规则方法
  8. Python批量转换ppt文件为pptx文件
  9. python爬虫什么结构好_python爬虫入门:爬虫基础了解一下 !! 盘它
  10. 什么是函数模板以及什么是类模板