力扣2874 有序三元组中的最大值II
从表达式(nums[i]-nums[j])*nums[k]考虑,该表达式取最大肯定是nums[i]-nums[j]最大,且nums[k]最大,相乘则为最大值。这时可以考虑枚举j,对于任意一个j可以使用j之前的最大值即nums[i]-nums[j],乘以j之后的最大值即nums[k]。这样最大值可以通过维护前缀最大值和后缀最大值来解决。
class Solution {
public long maximumTripletValue(int[] nums) {
int len = nums.length;
long pre[] = new long [len];
pre[0] = nums[0];
for(int i = 1; i < len; i++){
long tmp = Math.max(pre[i-1],nums[i]);
pre[i] = Math.max(tmp,pre[i]);
}
long suf[] = new long[len + 1];
for(int i = len - 1; i >= 0; i--){
long tmp = Math.max(suf[i + 1],nums[i]);
suf[i] = Math.max(tmp,suf[i]);
}
long max = 0;
for(int i = 1; i < len; i++){
max = Math.max(max, suf[i+1]*(pre[i-1] - nums[i]));
}
return max;
}
}
浙公网安备 33010602011771号