static int max(int a, int b) { return a > b ? a : b; }
static int min(int a, int b) { return a < b ? a : b; }
int maxProduct(int *nums, int numsSize) {
int curMax = nums[0], curMin = nums[0], best = nums[0];
for (int i = 1; i < numsSize; i++) {
int x = nums[i];
int a = curMax * x, b = curMin * x;
curMax = max(x, max(a, b));
curMin = min(x, min(a, b));
best = max(best, curMax);
}
return best;
}
#include <algorithm>
#include <vector>
using namespace std;
class Solution {
public:
int maxProduct(vector<int> &nums) {
int curMax = nums[0], curMin = nums[0], best = nums[0];
for (int i = 1; i < (int)nums.size(); i++) {
int x = nums[i];
int a = curMax * x, b = curMin * x;
curMax = max({x, a, b});
curMin = min({x, a, b});
best = max(best, curMax);
}
return best;
}
};
package dp
func maxProduct(nums []int) int {
curMax, curMin, best := nums[0], nums[0], nums[0]
for _, x := range nums[1:] {
a, b := curMax*x, curMin*x
curMax = max(x, a, b)
curMin = min(x, a, b)
best = max(best, curMax)
}
return best
}
class Solution {
public int maxProduct(int[] nums) {
int curMax = nums[0], curMin = nums[0], best = nums[0];
for (int i = 1; i < nums.length; i++) {
int x = nums[i];
int a = curMax * x, b = curMin * x;
curMax = Math.max(x, Math.max(a, b));
curMin = Math.min(x, Math.min(a, b));
best = Math.max(best, curMax);
}
return best;
}
}
/**
* @param {number[]} nums
* @return {number}
*/
var maxProduct = function (nums) {
let curMax = nums[0], curMin = nums[0], best = nums[0];
for (let i = 1; i < nums.length; i++) {
const x = nums[i];
const a = curMax * x, b = curMin * x;
curMax = Math.max(x, a, b);
curMin = Math.min(x, a, b);
best = Math.max(best, curMax);
}
return best;
};
from typing import List
class Solution:
def maxProduct(self, nums: List[int]) -> int:
cur_max = cur_min = best = nums[0]
for x in nums[1:]:
a, b = cur_max * x, cur_min * x
cur_max = max(x, a, b)
cur_min = min(x, a, b)
best = max(best, cur_max)
return best
impl Solution {
pub fn max_product(nums: Vec<i32>) -> i32 {
let (mut cur_max, mut cur_min, mut best) = (nums[0], nums[0], nums[0]);
for &x in &nums[1..] {
let (a, b) = (cur_max * x, cur_min * x);
cur_max = x.max(a).max(b);
cur_min = x.min(a).min(b);
best = best.max(cur_max);
}
best
}
}