LeetCode算法题-Best Time to Buy and Sell Stock
这是悦乐书的第172次更新,第174篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第31题(顺位题号是121)。假设有一个数组,其中第i个元素是第i天给定股票的价格。如果只被允许完成最多一笔交易(即买入并卖出一股股票),请设计算法以找到最大利润。请注意,在购买之前不能出售股票。例如:
输入:[7,1,5,3,6,4]
输出:5
说明:在第2天买入(价格= 1)并在第5天卖出(价格= 6),利润= 6-1 = 5。不是7-1 = 6,因为售价需要大于购买价格。
输入:[7,6,4,3,1]
输出:0
说明:在这种情况下,不进行任何交易,即最大利润= 0。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
特殊情况一:当传入的数组为null时,直接返回0。
特殊情况二:当传入的数组不为null,但是其内只有0个或者1个元素时,无法支持买入并卖出操作,直接返回0。
正常情况:要想股票获利,需要满足低买高卖的条件,否则不获利甚至亏损。先将第1天的价格单独拿出来,接着开始遍历数组(从第二个元素开始遍历),如果第二天的价格高于第一天的价格,此时的最大利润是第二天的价格减去第一天的价格与最大利润初始值之间的最大值,否则买入价格就应该换成第二天的价格,依次向后循环,直到比较完所有的价格。最后,如果最大利润大于0,此时最大利润就是其本身,否则最大利润为0。
public int maxProfit(int[] prices) {
if (prices == null || prices.length <= 1) {
return 0;
}
int maxProfit = Integer.MIN_VALUE;
int buyPrice = prices[0];
for (int i=1; i < prices.length; i++) {
if (prices[i] > buyPrice) {
maxProfit = Math.max(maxProfit, prices[i]-buyPrice);
} else {
buyPrice = prices[i];
}
}
if (maxProfit > 0) {
return maxProfit;
}
return 0;
}
对于上面的最大利润的初始值,也可以设为0,最后直接返回最大利润即可,就无需再加多一步判断了。
03 小结
此题的解法只用了一层循环,因此时间复杂度是O(n);此题只创建了两个变量,因此空间复杂度是O(1)。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Best Time to Buy and Sell Stock的更多相关文章
- LeetCode算法题-Best Time to Buy and Sell Stock II
这是悦乐书的第173次更新,第175篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第32题(顺位题号是122).假设有一个数组,其中第i个元素是第i天给定股票的价格.设计 ...
- 【一天一道LeetCode】#122. Best Time to Buy and Sell Stock II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Say you ...
- 【刷题-LeetCode】188 Best Time to Buy and Sell Stock IV
Best Time to Buy and Sell Stock IV Say you have an array for which the i-th element is the price of ...
- 【刷题-LeetCode】123 Best Time to Buy and Sell Stock III
Best Time to Buy and Sell Stock III Say you have an array for which the ith element is the price of ...
- 【刷题-LeetCode】122 Best Time to Buy and Sell Stock II
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- 【刷题-LeetCode】121 Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a gi ...
- 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- LeetCode解题报告—— Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a gi ...
- 【LeetCode】188. Best Time to Buy and Sell Stock IV 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
随机推荐
- YARN集群的mapreduce测试(四)
将手机用户使用流量的数据进行分组,排序: 测试准备: 首先同步时间,然后master先开启hdfs集群,再开启yarn集群:用jps查看: master上: 先有NameNode.SecondaryN ...
- [PHP] php + phpstudy + phpstrom + xdebug + postman开启调试
主体 php + phpstudy + phpstrom + xdebug + postman + vue + chrome 使用的是前后端分离的开发方式,vue 在 webpack 通过代理进行请求 ...
- [转]laravel DB类SQL语句操作(CURD)
本文转自:https://blog.csdn.net/woshihaiyong168/article/details/52992812 版权声明:本文为勇哥原创文章,转载请注明出处哦!!! https ...
- 【转载】C#生成图片的缩略图
图片处理是C#程序开发中时常会涉及到的一个业务,除了图像的上传.保存以及下载等功能外,根据上传的图片生成一个缩略图也是常见业务,在C#语言中,可以通过Image类提供的相关方法对图片进行操作,如指定宽 ...
- eclipse使用svn
主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解 以svn为例,git的master相当于trunk,dev分支相当于branches --------------- ...
- [javaEE] Tomcat的安装与配置
下载压缩包,解压缩,好,安装完成 进入解压目录/bin/下面,找到startup.bat,双击,此时如果报错,那么就是没有设置环境变量JAVA_HOME,进入环境变量去设置,JAVA_HOME指向jd ...
- PHP定界符eof 的使用
PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话, 肯定要有大量的转义符来对字符串中的引号等 ...
- 【Tomcat】Tomcat的类加载机制
在Tomcat中主要有以下几种类加载器:(图片来自网络) tomcat启动时,会创建几种类加载器: 1 Bootstrap 引导类加载器 加载JVM启动所需的类,以及标准扩展类,位于jre/lib/e ...
- JavaScript 笔记(一)
Number 1.2345e3=1.2345*1000 NaN//not a num 无法计算结果 Infinity //无限大 数组 var arr=[1,2,'hello'] 下标从0开始 对象 ...
- K8S 高级调度方式
可以使用高级调度分为: 节点选择器: nodeSelector.nodeName 节点亲和性调度: nodeAffinity Pod亲和性调度:PodAffinity Pod反亲和性调度:podAnt ...