前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1793. 好子数组的最大分数(单调栈)

LeetCode 1793. 好子数组的最大分数(单调栈)

作者头像
Michael阿明
发布2021-09-06 10:14:41
4020
发布2021-09-06 10:14:41
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

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

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

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

代码语言:javascript
复制
示例 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 <= 10^5
1 <= nums[i] <= 2 * 10^4
0 <= k < nums.length

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-score-of-a-good-subarray 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 正反两次单调栈,获取以每个数字为最小值的区间 左右界限
代码语言:javascript
复制
class Solution {
public:
    int maximumScore(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> right(n,-1), left(n,-1);
        stack<int> s;
        for(int i = n-1; i >= 0; i--)
        {
            while(!s.empty() && nums[s.top()] >= nums[i])
                s.pop();//大于等于我的,我是最小的啦,删除,接着往后找
            if(!s.empty())
                right[i] = s.top()-1;
            else
                right[i] = n-1;
            s.push(i);
        }
        while(!s.empty()) s.pop();
        for(int i = 0; i < n; i++)
        {
            while(!s.empty() && nums[s.top()] >= nums[i])
                s.pop();
            if(!s.empty())
                left[i] = s.top()+1;
            else
                left[i] = 0;
            s.push(i);
        }
        int maxScore = 0;
        for(int i = 0; i < n; i++)
            if(left[i] <= k && k <= right[i])
                maxScore = max(maxScore, nums[i]*(right[i]-left[i]+1));
        return maxScore;
    }
};

288 ms 98.2 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档