1793. 好子数组的最大分数
class Solution:
def maximumScore(self, nums: List[int], k: int) -> int:
n = len(nums)
left, right = k, k
minH = nums[k]
ret = nums[k]
while left - 1 >= 0 or right + 1 < n:
if right == n - 1 or (left - 1 >= 0 and nums[left - 1] > nums[right + 1]):
minH = min(minH, nums[left - 1])
left -= 1
else:
minH = min(minH, nums[right + 1])
right += 1
ret = max(ret, minH * (right - left + 1))
return ret
class Solution {
public:
int maximumScore(vector<int>& nums, int k) {
int n = nums.size();
int left = k, right = k;
int minH = nums[k], ret = nums[k];
while (left - 1 >= 0 || right + 1 < n){
if (right == n - 1 || (left - 1 >= 0 && nums[left - 1] > nums[right + 1])){
minH = min(minH, nums[left - 1]);
--left;
}else{
minH = min(minH, nums[right + 1]);
++right;
}
ret = max(ret, minH * (right - left + 1));
}
return ret;
}
};