这道题是LeetCode里的第121道题。
题目描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例 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。
- 买入:如果前一天比今天贵,则买入,否则,昨天买入,寻找合适的卖出时间。
- 卖出:如果今天比前一天贵,则卖出,否则昨天卖出,今天再次买入,再次往后寻找。
解题代码:
class Solution {
public int maxProfit(int[] prices) {
int dp = 0;
int len = prices.length;
if(len == 0 || len == 1)return 0;
int buy = prices[0], sell, pre = buy;
for(int i = 1; i < len; i++){
if(prices[i] < buy){
buy = prices[i];
pre = buy;
}else{
if(pre < prices[i]){
sell = prices[i];
dp = dp > sell-buy ? dp : sell-buy;
pre = sell;
}
}
}
return dp;
}
}
提交结果:
个人总结:
并不是很像动态规划,但又有点相似的地方,都是找最优解。