Problem: 2708. 一个小组的最大实力值
class Solution {
public long maxStrength(int[] nums) {
// 初始化mn和mx为第一个元素的值
long mn = nums[0];
long mx = nums[0];
// 从第二个元素开始遍历数组
for (int i = 1; i < nums.length; i++) {
long x = nums[i]; // 当前遍历的元素
// 暂存当前的最小值mn,便于后续计算最大值mx时使用
long tmp = mn;
// 计算当前的最小乘积值mn
// 可能情况:
// 1. 不选当前元素x,mn保持不变
// 2. 只选择当前元素x作为子序列的开始
// 3. 当前mn乘以x(如果x是正数,这样会减少mn的值)
// 4. 当前mx乘以x(如果x是负数,这样可能得到更小的值)
mn = Math.min(Math.min(mn, x), Math.min(mn * x, mx * x));
// 计算当前的最大乘积值mx
// 可能情况:
// 1. 不选当前元素x,mx保持不变
// 2. 只选择当前元素x作为子序列的开始
// 3. 暂存的mn乘以x(如果x是负数,这样可能得到更大的值)
// 4. 当前mx乘以x(如果x是正数,这样可以增加mx的值)
mx = Math.max(Math.max(mx, x), Math.max(tmp * x, mx * x));
}
// 最终返回的mx即为最大实力值
return mx;
}
}