class Solution {
public long maximumTripletValue(int[] nums) {
long maxx=0;
int n=nums.length;
int[] pre=new int[n],beh=new int[n];
pre[0]=nums[0];
beh[n-1]=nums[n-1];
for(int j=1;j<n-1;j++)
if(nums[j-1]>pre[j-1]) pre[j]=nums[j-1];
else pre[j]=pre[j-1];
for(int j=n-2;j>0;j--)
if(nums[j+1]>beh[j+1]) beh[j]=nums[j+1];
else beh[j]=beh[j+1];
for(int j=1;j<n-1;j++)
maxx=Math.max(maxx,(long)(pre[j]-nums[j])*beh[j]);
return maxx==0? 0:maxx;
}
}
(2)枚举k
思路:
我们枚举k,然后维护k左边(nums[i]-nums[j])的最大值
我们可以在遍历的过程中,维护 nums[i]的最大值 preMax,同时维护preMax 减当前元素的最大值 maxDiff,这就是 k 左边 nums[i]−nums[j] 的最大值。
java复制代码
class Solution {
public long maximumTripletValue(int[] nums) {
long maxx=0;
int premaxdiff=0,premax=0;
for(int x:nums)
{
maxx=Math.max(maxx,(long)premaxdiff*x);
premaxdiff=Math.max(premaxdiff,premax-x);
premax=Math.max(premax,x);
}
return maxx==0? 0:maxx;
}
}