LeedCode121. 买卖股票的最佳时机(Java语言实现)
LeedCode两周刷完数据结构
- 一、121. 买卖股票的最佳时机(Java语言实现)
- 题目描述
- 推荐方法:DP思想
- 进阶方法:一次遍历
- 复杂度
- 结果
一、121. 买卖股票的最佳时机(Java语言实现)
题目描述
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出>该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
推荐方法:DP思想
思路还是挺清晰的,还是DP思想:
记录【今天之前买入的最小值】
计算【今天之前最小值买入,今天卖出的获利】,也即【今天卖出的最大获利】
比较【每天的最大获利】,取最大值即可
public int maxProfit(int[] prices) {if(prices.length <= 1)return 0;int min = prices[0], max = 0;for(int i = 1; i < prices.length; i++) {max = Math.max(max, prices[i] - min);min = Math.min(min, prices[i]);}return max;}
进阶方法:一次遍历
一次遍历算法
假设给定的数组为:[7, 1, 5, 3, 6, 4]
如果我们在图表上绘制给定数组中的数字,我们将会得到:
我们来假设自己来购买股票。随着时间的推移,每天我们都可以选择出售股票与否。那么,假设在第 i 天,如果我们要在今天卖股票,那么我们能赚多少钱呢?
显然,如果我们真的在买卖股票,我们肯定会想:如果我是在历史最低点买的股票就好了!太好了,在题目中,我们只要用一个变量记录一个历史最低价格 minprice,我们就可以假设自己的股票是在那天买的。那么我们在第 i 天卖出股票能得到的利润就是 prices[i] - minprice。
因此,我们只需要遍历价格数组一遍,记录历史最低点,然后在每一天考虑这么一个问题:如果我是在历史最低点买进的,那么我今天卖出能赚多少钱?当考虑完所有天数之时,我们就得到了最好的答案。
public class Solution {public int maxProfit(int prices[]) {int minprice = Integer.MAX_VALUE;int maxprofit = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < minprice) {minprice = prices[i];} else if (prices[i] - minprice > maxprofit) {maxprofit = prices[i] - minprice;}}return maxprofit;} }
复杂度
复杂度分析
时间复杂度:O(n),只需要遍历一次。
空间复杂度:O(1),只使用了常数个变量。
结果
方法一:
方法二:
LeedCode121. 买卖股票的最佳时机(Java语言实现)相关推荐
- 《LeetCode力扣练习》第121题 买卖股票的最佳时机 Java
<LeetCode力扣练习>第121题 买卖股票的最佳时机 Java 一.资源 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价 ...
- 炒股Java_基于java计算买卖股票的最佳时机
这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...
- [LeetCode刷题笔记]714 - 买卖股票的最佳时机含手续费(C++/Python3/Java/动态规划/贪心)
一.题目描述 给定一个整数数组 prices 和 整数 fee ,其中 prices[i] 表示第 i 天的股票价格,fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付 ...
- 买卖股票的最佳时机(Java)
121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日 ...
- JAVA刷Leecode-贪心算法-区间问题-买卖股票的最佳时机 II
JAVA刷Leecode-贪心算法 算法思想 区间问题-买卖股票的最佳时机 II(122.,easy) 题目描述 输入输出样例 示例1 示例 2: 解题思路: 题解 解题思路:贪心算法 题解 资源学习 ...
- 力扣leetcode之Java刷题121买卖股票的最佳时机
121. 买卖股票的最佳时机 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择某一天买入这只股票,并选择在未来的某一 ...
- 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...
- 20190808:买卖股票的最佳时机
买卖股票的最佳时机 买卖股票的最佳时机 大致思路 代码实现 买卖股票的最佳时机 力扣简单习题1: 力扣简单习题2: 大致思路 两题的区别是,第一题只进行一次交易,第二题可以多次交易 第一题:遍历时随时 ...
- 《LeetCode刷题》—121. 买卖股票的最佳时机
<LeetCode刷题>-121. 买卖股票的最佳时机 一.题目内容 原题连接:https://leetcode.cn/problems/best-time-to-buy-and-sell ...
最新文章
- cv2.threshold() 阈值:使用Python,OpenCV进行简单的图像分割
- 部署 SCCM 2012R2之三:系统准备篇
- html页面转换成pdf
- 直播协议HLS技术要点分析:分段生成与m2u8文件
- c++ float 转string
- Python面试总结(四)ip正则与三次握手四次挥手
- Problem G: C语言习题 医生值班
- 优酷视频手机上能发现投屏设备,但投屏失败?
- Python中groupby的简单使用
- php安装了openssl扩展,php如何安装openssl扩展?
- 光孝寺招聘员工!月薪15000,早九晚五,免费饭菜,有证者优先,工作六根清净,而且.......
- ESG供应链(ERP实施顾问必备知识)
- Cross Apply 与 Outer Apply 的区别
- U盘格式化后容量变小了_内存丢失如何恢复?
- 双十一全零售领域狂欢 请了明星代言商家真的能赚到钱吗?
- python爬虫之入门级实战实例(东方财富人气top100、汉服荟视频下载)
- 以太网已连接却无法联网的解决记录
- 通用的综合大数据数据可视化展示html页面源码
- 适用于高级别自动驾驶的驾驶员可预见误用仿真测试
- CSS超链接样式,去除下划线等
热门文章
- Java程序员如何查看本机连接过的 WiFi 和密码
- 1391586-30-3,Fmoc-p-azido-D-Phe-OH,4-Azido-N-Fmoc-D-phenylalanine分子式是C24H20N4O4
- C# 自动出题算术训练
- Facebook广告数据
- 通达OA二次开发之ERP对接
- c++第3次上机实验 项目1:个人所得税计算器
- html5 星空扩散效果,HTML5 canvas实现炫酷旋转银河系星空背景特效解析
- 在github开源代码添加MIT
- 基于Python+SQLite实现校园信息化统计平台【100010095】
- 微信营销十(微信公众号排版技巧)