题意:给出一个数组和一个数值k,对于所有min(ai…aj)*(j-i+1)返回一个最大值。
思路:开始想着直接递归算,很荣幸的超时了,
用双指针不断的扩大区间,判断是否小于最小值ak,判断a[l]和a[r]的最大值接着进行循环
AC代码:
class Solution {
public static int maximumScore(int[] nums, int k) {
int l=k,r=k,n=nums.length,ans=0;
while(true) {
while(r<n&&nums[r]>=nums[k])r++;
while(l>=0&&nums[l]>=nums[k])l--;
ans=Math.max((r-l-1)*nums[k], ans);//r大1,l小1
if(l<0&&r==n)break;
if(l >= 0 && r < n) nums[k] = Math.max(nums[l], nums[r]);
else if(l < 0) nums[k] = nums[r];
else nums[k] = nums[l];
}
return ans;
}
}