目录
一、题目描述
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
示例 2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
限制:
0 <= 数组长度 <= 10^5
二、思路讲解
比较典型的动态规划问题,按照天数增长,计算出第一天到当天的最大利润。
第一天到当天的最大利润 = max{前一天的最大利润, 今天的价格-历史最低价} 。
考虑极端情况,如果传入的数组为空,直接返回0。
三、Java代码实现
class Solution {
public int maxProfit(int[] prices) {
//考虑数组为空的情况
if(prices.length == 0){
return 0;
}
int len = prices.length; //天数
int dp = 0; //记录当前最大利润
int min = prices[0]; //记录当前最小价格
//计算出第一天到第i天的最大利润
for(int i=1; i<len; i++){
min = Math.min(prices[i], min);
dp = Math.max((prices[i]-min), dp);
}
//返回
return dp;
}
}
四、时空复杂度分析
时间复杂度: O(N) 需要遍历一遍prices数组
空间复杂度: O(1)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/125052.html