本文主要是介绍Leetcode1793. Maximum Score of a Good Subarray,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个数组和一个下标 k k k
子数组 ( i , j ) (i,j) (i,j)分数定义为 min ( n u m s [ i ] , n u m s [ i + 1 ] , ⋯ , n u m s [ j ] ) ∗ ( j − i + 1 ) \min\left(nums[i], nums[i +1],\cdots, nums[j]\right)*\left(j-i+1\right) min(nums[i],nums[i+1],⋯,nums[j])∗(j−i+1)
其中 i ≤ k ≤ j i\le k \le j i≤k≤j
找到最大的子数组分数
其实这题有点像是接雨水那个题目
从 k k k出发,哪一边大就往哪一边扩展
class Solution {
public:int maximumScore(vector<int>& nums, int k) {int n = nums.size();int left = k;int right = k;int ans = nums[k];int cur = nums[k];while(left > 0 || right < n - 1){if((left > 0 ? nums[left - 1]: 0) < (right < n - 1? nums[right + 1]: 0)){++right;cur = min(cur, nums[right]);}else{--left;cur = min(cur, nums[left]);}ans = max(ans, cur * (right - left + 1));}return ans;}
};
时间复杂度 O ( n ) O(n) O(n)
这篇关于Leetcode1793. Maximum Score of a Good Subarray的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!