leetcode 算法题121 (简单031) 买卖股票的最佳时机
- 题目介绍
给定一个数组,它的第 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。
- 解法一
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
if(prices.length < 2) {
return 0;
}
let max = 0, i = 0;
while(i < prices.length - 1) {
let j = i + 1;
while(j < prices.length) {
max = Math.max(max, prices[j] - prices[i]);
j++;
}
i++;
}
return max;
};
执行用时 : 472ms, 在所有 JavaScript 提交中击败了22.76%的用户
内存消耗 : 35.4MB, 在所有 JavaScript 提交中击败了44.16%的用户
- 解法二
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let i = 1, profits = [];
while(i < prices.length) {
profits.push(prices[i] - prices[i-1]);
i++;
}
return getMaxSum(profits);
};
const getMaxSum = nums => {
let i = 0, sum = 0, max = 0;
while(i < nums.length) {
sum += nums[i];
sum = Math.max(sum, 0);
if(nums[i] > 0) {
max = Math.max(sum, max);
}
i++;
}
return max;
}
执行用时 : 82ms, 在所有 JavaScript 提交中击败了77.31%的用户
内存消耗 : 36.4MB, 在所有 JavaScript 提交中击败了15.77%的用户
- 解法三
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
if(prices.length < 2) {
return 0;
}
let i = 1, sum = 0, max = 0;
while(i < prices.length) {
sum += (prices[i] - prices[i - 1]);
sum = Math.max(sum, 0);
max = Math.max(max, sum);
i++;
}
return max;
};
执行用时 : 80ms, 在所有 JavaScript 提交中击败了87.18%的用户
内存消耗 : 35.5MB, 在所有 JavaScript 提交中击败了30.06%的用户