首页 > 其他分享 >闯关leetcode——121. Best Time to Buy and Sell Stock

闯关leetcode——121. Best Time to Buy and Sell Stock

时间:2024-10-18 12:45:48浏览次数:3  
标签:Sell sell Buy profit maxProfit 121 int prices day

大纲

题目

地址

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/

内容

You are given an array prices where prices[i] is the price of a given stock on the ith day.

You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

Example 1:

Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

Example 2:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

Constraints:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

解题

这题就是要找到在一个区间中,计算一个值与后面最大值的差,然后找到最大的差。
一种直观的思路就是找到一个值后,去寻找它后面最大的值,然后将差保存起来。不停迭代这个过程,得到最大的差值。但是这个思路是O(n2),非常耗时。
实际我们在考虑这个问题时,需要抓住一个点:起始位置(目前的最小值)后如果小于该值的值,则它和后面出现的最大值的差就是最大差;如果出现了比它小的值,就要拿这个小的值向后去尝试。以此类推,可以得出最大的差值。这样它的复杂度就是O(n)。

#include <vector>
using namespace std;

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int minPrice = prices[0];
        int maxProfit = 0;
        for (int a: prices) {
            if (minPrice > a) {
                minPrice = a;
            } else {
                maxProfit = max(maxProfit, a - minPrice);
            }
        }
        return maxProfit;
    }
};

在这里插入图片描述

代码地址

https://github.com/f304646673/leetcode/tree/main/121-Best-Time-to-Buy-and-Sell-Stock/cplusplus

标签:Sell,sell,Buy,profit,maxProfit,121,int,prices,day
From: https://blog.csdn.net/breaksoftware/article/details/142204685

相关文章

  • 代码随想录算法训练营 | 121.买卖股票的最佳时机,122.买卖股票的最佳时机II,123.买卖股
    121.买卖股票的最佳时机题目链接:121.买卖股票的最佳时机文档讲解︰代码随想录(programmercarl.com)视频讲解︰买卖股票的最佳时机日期:2024-10-14想法:经常有用0和1表示相反状态,dp[i][0]表示第i天持有股票时身上最多的钱,比如第一天股票5元,持有了,身上的钱就为dp[0][0]=-5,第二天股......
  • 洛谷P1219八皇后问题
    [USACO1.5]八皇后CheckerChallenge题目链接题目描述一个如下的\(6\times6\)的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列\(2\4\6\1\3\5\)来描述,第\(i\)个数......
  • Walter Russell's 'The Universal One' - Detailed Summary
    1.宇宙统一理论Russell试图提出一个全面的理论来解释宇宙的所有方面。他认为:所有自然现象,无论是物质的、能量的还是精神的,都遵循相同的基本原理。宇宙是一个统一的、有机的整体,其中所有部分都相互关联和相互依存。他的理论试图涵盖从原子结构到星系形成,从生命起源到意......
  • 跨境外贸巨头pandabuy如果“消失了”,跨境外贸物流企业如何开发类似淘宝代购集运系统
    前言:前两天,在一个反向海淘交流群里,有一个卖家说了一句话:“靠着PandaBuy吃了一波红利,现在迷茫了”,这让我感触颇深。作为wegobuy海淘平台网站软件提供商(pandabuy初期平台),我的内心其实是五味杂陈的。2019年6月10日,客户是福建及杭州的技术人员找到我们来沟通系统。这对我来说是非......
  • GESP等级考试 20241006_121124
    官网CCF-GESP编程能力等级认证https://gesp.ccf.org.cn/考钢图形化1579692243025952.pdfhttps://gesp.ccf.org.cn/101/attach/1579692243025952.pdf考钢C++1579675000242208.pdfhttps://gesp.ccf.org.cn/101/attach/1579675000242208.pdf考级相关真题解析-CCF-GESP编程......
  • CF1214G Feeling Good 题解
    题目链接点击打开链接题目解法我真菜啊,感觉每一步都不难,但一步都没想到/yun考虑两行\(x,y\)什么时候可以构造出合法的矩形?即\(x\)中需要有\(y\)对应位置为\(0\)的\(1\),\(y\)中需要有\(x\)对应位置为\(0\)的\(1\)归纳一下,\(x\)不是\(y\)的子集且\(y\)不......
  • [1216]基于JAVA的家政搬家智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的家政搬家智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景:在当前社会经济快速发展和城市化进程不断加快的背景下,家政服务行业尤其是搬家服务市场需求日益旺盛。然而,传统的家政搬家服务管理模式大多......
  • 南沙C++信奥赛老师解一本通题1217:棋盘问题
    ​ 【题目描述】在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 kk 个棋子的所有可行的摆放方案 CC。【输入】输入含有多组测试数据。每组数据......
  • MediaBuy系列—为什么要使用Tracker
    在mVAS领域,正确的使用工具、无疑会让你的广告投放事半功倍。追踪工具,也就是Tracker,一定是MediaBuyer使用的工具里面最重要的一个。它们监控并分析着每一次的点击,从最初的曝光到最终的转化,提供多维的重要数据指标,比如clicks、LpClicks、LpCTR、CR等等。这篇文章,我们来聊聊为......
  • [ARC121E] Directed Tree 题解
    简单容斥题。思路题面的条件相当于一个位置上填的点不能是自己的祖先。发现直接做并不好做。考虑容斥。我们想要求出\(f_i\)为至少有\(i\)个不合法位置的方案数。那么答案为:\[\sum_{i=0}^nf_i(-1)^i\]如何求解。设\(f_{i,j}\)为\(i\)子树下有\(j\)个不合法位......