当前位置: 首页 > article >正文

滑动窗口系列(背向双指针)9/8

一、好子数组的最大分数

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

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

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

因为题目中要求子数组的两个端点需要满足i<=k<=j;那我们干脆将left和right都初始化为k;然后分别向两边移动;那我们向两边移动的规则是什么?

我们的目的是得到最大的分数,即:min*(right-left+1);无论是向左移还是向右移,长度都是不变的;我们只能将min的值变大

1.如果nums[left]>nums[right]的,那我们移动左指针。并且要更新minL;

2.如果nums[left]<=nums[right]的,那我们移动右指针,并且更新minR;

3.如果left或者right某一个到头了,那我们就更新另一边

4.如果两个都到头了,循环结束。

代码:
class Solution {
    public int maximumScore(int[] nums, int k) {
        //从k出发 然后找到最大分数
        int left=k;
        int right=k;
        int res=0;
        int minL=nums[k];
        int minR=nums[k];
        while(left>=0||right<nums.length){
            res=Math.max(res,Math.min(minL,minR)*(right-left+1));
            //左右指针分别到达两端 就停止
            if(left==0&&right==nums.length-1)break;
            if(left==0&&right<nums.length-1){
                minR=Math.min(minR,nums[++right]);
            }else if(left!=0&&right==nums.length-1){
                minL=Math.min(minL,nums[--left]);
            }else{
                if(nums[left-1]>nums[right+1]){
                    minL=Math.min(minL,nums[--left]);
                }else{
                    minR=Math.min(minR,nums[++right]);
                }
            }
        }
        return res;
    }
}


http://www.kler.cn/a/297291.html

相关文章:

  • [git操作] git创建仓库上传github报错
  • 并发编程(六)
  • vue3 cookie 存取删数据
  • 镭速助力构筑ICT安全高效的大文件传输
  • 【android10】【binder】【2.servicemanager启动——全源码分析】
  • MySQL数据归档策略:实现定期数据维护与优化
  • 数据结构—单链表的基本操作
  • Vue3进阶:异步状态示例
  • Docker 学习 Day 1
  • springboot整合Logback
  • 千益畅行,共享旅游卡,引领旅游新潮流
  • “Jmeter-InfluxDB-Grafana“常见错误有哪些如何解决?
  • verilog报错:Illegal concatenation of an unsized constant. and 输入输出位宽不匹配
  • 安全服务面试-2
  • Spring Cloud LoadBalancer
  • 【QT Creator】基本使用
  • 在cscode中通过maven创建java项目
  • 免费 U 盘数据恢复 - 用 4 种免费方法从随身U 盘恢复文件
  • html备忘录
  • 个人信息记录安全:守护数字时代的隐私堡垒