1793-好子数组的最大分数

Raphael Liu Lv10

给你一个整数数组 nums (下标从 0 开始) 和一个整数 k

一个子数组 (i, j)分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。一个 子数组的两个端点下标需要满足 i <= k <= j

请你返回 子数组的最大可能 分数

示例 1:

**输入:** nums = [1,4,3,7,4,5], k = 3
**输出:** 15
**解释:** 最优子数组的左右端点下标是 (1, 5) ,分数为 min(4,3,7,4,5) * (5-1+1) = 3 * 5 = 15 。

示例 2:

**输入:** nums = [5,5,4,5,4,1,1,1], k = 0
**输出:** 20
**解释:** 最优子数组的左右端点下标是 (0, 4) ,分数为 min(5,5,4,5,4) * (4-0+1) = 4 * 5 = 20 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 2 * 104
  • 0 <= k < nums.length

Problem: 1793. 好子数组的最大分数

[TOC]

思路

讲述看到这一题的思路

解题方法

描述你的解题方法

复杂度

  • 时间复杂度:

    添加时间复杂度, 示例: O(n)

  • 空间复杂度:

    添加空间复杂度, 示例: O(n)

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

public class Solution {
public int MaximumScore(int[] nums, int k) {
int l = k,r = k,n = nums.Length,ans = 0;
while(true){
while(l >=0&&nums[l]>=nums[k])l--;
while(r < n && nums[r]>=nums[k]) r++;
ans = Math.Max((r-l-1)*nums[k],ans);
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[l];
else nums[k] = nums[r];
}
return ans;
}
}
 Comments
On this page
1793-好子数组的最大分数