首页 > 试题广场 >

买卖股票的最好时机(一)

[编程题]买卖股票的最好时机(一)
  • 热度指数:170852 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益
1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
2.如果不能获取到任何利润,请返回0
3.假设买入卖出均无手续费

数据范围:
要求:空间复杂度 ,时间复杂度
示例1

输入

[8,9,2,5,4,7,1]

输出

5

说明

在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。            
示例2

输入

[2,4,1]

输出

2
示例3

输入

[3,2,1]

输出

0
头像 Maokt
发表于 2021-07-05 16:44:18
精华题解 算法思想一:暴力法 解题思路: 需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。 形式上,对于每组 i 和 j(其中 j>i)我们需要找出 max(prices[j]−prices[i]) 代码展示: 展开全文
头像 Peterliang
发表于 2021-07-16 14:41:38
精华题解 题意分析 这个题目就是给我们一个数组,数组中的每个数字代表第i天某支股票的价格,我们需要选择一天买入,选择一天卖出。最后使我们的收益最大化。 题目难度:简单 思路分析 解法一 暴力枚举 这个思路就是对于每一天的股票的价格,我们假设这天我们卖出这个股票,那么我们可以枚举这天之前的股票价格作为买入 展开全文
头像 牛客题解官
发表于 2022-04-22 12:54:04
精华题解 题目主要信息: 给出一个数组表示连续多日的股票价格 你可以选择在某一天买入股票,在另一天卖出股票,买卖都只有一次机会,不能在同一天 假设买卖没有手续费,问最高收益是多少,即卖出的价格减去买入的价格,如果没有利润需要返回0 可以看成查找数组中b-a的最大值,其中b必须在a的后面 举一反三: 学习完 展开全文
头像 堆栈哲学
发表于 2021-07-09 09:58:07
精华题解 分析 求买股票的最佳时期,应该注意的细节: 卖出股票之前必须先买入 卖出的价格>买入时候的价格(得考虑利润) 给一个数组模拟股票,换句话说,就是查找数组中某两个元素差值的最大。 如果无利可图,请return 0 解法一:暴力(常规大循环解决) 思路步骤: 最显而易见的解法,当然可能并不是 展开全文
头像 牛一霸
发表于 2021-07-02 21:34:22
精华题解 题目:买卖股票的最好时机 描述:假设你有一个数组,其中第 i个元素是股票在第 i天的价格。 你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。 示例1:输入:[1,4,2],返回值:3   解法一 展开全文
头像 leaves0924
发表于 2021-07-17 19:47:23
精华题解 题目描述 假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例1输入:[1,4,2]返回值:3 题目分析 在只有一次买入和卖出的机会的情况下,选择第 i 天买入,第 j 天卖出,则收益为 展开全文
头像 华科不平凡
发表于 2020-08-10 11:43:37
暴力法比较直接,贪心法比较美丽。 为啥可以用贪心呢?因为买必须在卖之前,因此每到一步都可以获取到这一步为止的最佳状态,不断这个最佳状态即可。 class Solution { public: /** * * @param prices int整型vector * 展开全文
头像 数据结构和算法
发表于 2021-03-19 22:11:08
1,动态规划解决 这题是让求完成一笔交易所获得的最大利润,首先我们来看一下使用动态规划该怎么解决,动态规划还是那常见的几个步骤 确定状态 找到转移公式 确定初始条件以及边界条件 计算结果 我们来定义一个二维数组dp[length][2],其中dp[i][0]表示第i+1天(i是从0开始的)结束 展开全文
头像 大桔骑士v
发表于 2020-02-28 10:11:53
设dp[i]表示到i天时候卖出(天数从0开始编号)所能取得的最大收益,所以第i-1天必须持有(当天买当天卖的情况就是0,编程时将答案ans初始化为0就不需要考虑当天买卖了)。那么就是看是第i-1天之前买入的,还是第i-1天买入的了,即 也就是说,当dp[i-1]为负的时候,就直接取这一天的"收益 展开全文
头像 王清楚
发表于 2020-12-29 14:37:48
因为只能买卖一次,我们把每一天都看一遍,如果在当天卖出的话能获得的最大收益是多少,然后再取最大值,就是答案了。在某一天卖出的最大收益的条件是:在这一天之前价格最便宜的时候买c++ class Solution { public: int maxProfit(vector<int> 展开全文
头像 ZiRuio
发表于 2021-11-25 17:23:59
假设股价是涨的,你已经知道今天之前某一天的股价最低 那你要买肯定就是在股价最低那天买进,今天抛出。 即得到当前所谓的"利润"(不包含未来更高价格) 那么如果整个未来的价格已经给你了,其实我们要计算的也就是:每一天的利润值 作比较即得到所有中的利润中的最大利润及所求数 第一天:最 展开全文
头像 暮雪千年长
发表于 2021-10-04 19:57:18
分析问题可知,最大股票售卖时间是当前最大的价格减去之前最小的价格。每次遍历先计算第i天前最小的价格,再计算到第i天的利润。 import java.util.*; public class Solution { /** * * @param prices int整型一 展开全文
头像 xuwenshg
发表于 2020-09-12 21:50:35
假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。 解题思路:由于之买卖一次,并且买股票之后才能卖掉股票,所以我们可以得出如下的计算公式:maxProfit[n] = max{arr[n] 展开全文
头像 熠丶
发表于 2020-11-25 13:30:13
做法:贪心 时间复杂度: 思路 这题实际上是在求 可利用贪心的思路维护在范围内最小即可,时间复杂度从将为代码 class Solution { public: /** * * @param prices int整型vector * @return int整型 */ 展开全文
头像 牛客567868013号
发表于 2021-09-22 07:28:56
# # # @param prices int整型一维数组 # @return int整型 #基本思路:假设当前a最小,当遇到b(b<a)时,我们可知:若后面出现的使得利益更大的价格C #(max利润=C-a),那么C-b一定大于C-a,即后面的最大收益的比较只需要通过b来计算 #(ma 展开全文
头像 超级码力233
发表于 2020-11-25 22:16:29
买卖股票的最好时机 题目链接 Solution 因为只有一次买入卖出的机会,所以可以枚举在哪天卖出。对于卖出的那一天,买入的那一天一定在这一天之前,并且是价格最低的。所以从前往后扫,记录并更新最小值即可。 Code class Solution { public: int maxProf 展开全文