首页 > 其他分享 >买卖股票的最佳时机(力扣简单题)

买卖股票的最佳时机(力扣简单题)

时间:2023-02-10 19:25:27浏览次数:36  
标签:买卖 int max flag 力扣 最小值 最佳时机 prices minprice

题目:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0

思路:

想法一:

  1. 因为要考虑买入卖出中间差最大,且买入卖出有先后顺序,因此不能单纯以最大最小值作参考。
  2. 要对每一个数进行讨论,但这样会使时间复杂度出奇的大。
  3. 因此我们选用动态规划,动态规划 :前i天的最大收益 = max
  4. 在使用动态规划过程中,我一开始选择创建一个最小值的方法,对每次前i个数进行排序,找到最小值,后来感觉T很大,放弃后使用flag变量标记前i个数最小值的下标,每增加一个数就与最小值进行比较。
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int max = 0;
        int flag = 0;
        for(int i = 1;i < prices.size();i++){
            if(prices[i] < prices[flag]){
                flag = i;
            }
            if((prices[i] - prices[flag]) > max){
                max = (prices[i] - prices[flag]);
            }
        }
        return max;

    }
};

想法二:

而官方给出的代码是:

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;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/solutions/136684/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. 其中1e9代表无穷。实际中遇到的一些问题,或者解决一些算法问题时,会遇到给某个变量初始化并赋值为1e9。接着后面会出现一些代码计算最小值。这时,1e9的作用是给变量赋一个初始极大值,原因在于后面的代码中需要取此变量和其他变量的最小值。初始化为一个最大值,亦即初始化为无穷,便于后面极小值的比较和获取,属于初始化的目的。
  2. 调用max函数可以直接计算二者最大值,min可以直接计算二者最小值。官方和我的思路差不多,不过实现形式简化了不少

标签:买卖,int,max,flag,力扣,最小值,最佳时机,prices,minprice
From: https://www.cnblogs.com/isku-ran/p/17110087.html

相关文章

  • 构造AVL树基础 + 力扣1382. 将二叉搜索树变平衡
    构造AVL树基础定义对于任意一个节点,左子树和右子树的高度差不能超过1。怎么计算标注节点的高度计算平衡因子如何维持平衡如果平衡被打破需要根据不同的情况来旋......
  • 买卖股票的最佳时机
    给定一个数组prices,它的第 i个元素 prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计......
  • 《剑指Offer》-32-从上到下打印二叉树/力扣-102/力扣-103
    就是二叉树的层序遍历,我记得这题,用栈用队列,然后有个关键的size()Ⅰ vector<int>levelOrder(TreeNode*root){ vector<int>res; if(!root)returnres; queue<T......
  • 力扣---1797. 设计一个验证系统
    你需要设计一个包含验证码的验证系统。每一次验证中,用户会收到一个新的验证码,这个验证码在currentTime时刻之后timeToLive秒过期。如果验证码被更新了,那么它会在curre......
  • 力扣701 二叉搜索树中的插入操作
     题目:给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索树中的任意节......
  • 力扣235 二叉搜索树的最近公共祖先
    题目:给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x......
  • 算法刷题 Day 32 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
    122.买卖股票的最佳时机II本题解法很巧妙,大家可以看题思考一下,在看题解。https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%8......
  • 力扣写题记录15-三数之和
    题目描述:给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返......
  • 刷题碎碎念---力扣001-006
    001--两数之和比较简单,暴力法就能过,可以用HashMap优化一下classSolution{publicint[]twoSum(int[]nums,inttarget){HashMap<Integer,Integer>map......
  • 《剑指Offer》-4-二维数组中查找/力扣-240-搜索二维数组Ⅱ
    从最后一列的第一个数字开始比较,依次倒数第二列第一个数字、倒数第三列...找到第一个<=target的数字,这样可以将范围缩小到一列然后用二分查找快速判断目标元素有没有......