首页 > 其他分享 >滑动窗口系列(背向双指针)9/8

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

时间:2024-09-08 12:24:33浏览次数:6  
标签:right nums int min 数组 背向 滑动 left 指针

一、好子数组的最大分数

给你一个整数数组 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;
    }
}

标签:right,nums,int,min,数组,背向,滑动,left,指针
From: https://blog.csdn.net/2301_78191305/article/details/142022744

相关文章

  • 重生之霸道C语言爱上我之走入指针(4)
    这次重生的内容比较难,如果大家有很简单的理解方式,欢迎指正。经过前面三次的指针学习,我们已经知道了关于指针的基础知识和一些指针运用,现在我们继续进行更深入的指针运用学习。1.字符指针变量在前面的学习中,我们学习了一个指针类型为字符指针char*。一般使用:intmain(){ ......
  • C语言进阶版第8课—指针(2)
    文章目录1.数组名的理解2.指针访问数组3.一维数组传参本质4.冒泡排序5.二级指针6.指针数组7.指针数组模拟二维数组1.数组名的理解sizeof(数组名)—这里的数组名代表整个数组,计算的也是整个数组的大小&数组名—这里的数组名代表是整个数组,取出的是整个数组......
  • 【十五派-注册安全分析报告-滑动验证加载不正常导致安全隐患】
    前言由于网站注册入口容易被黑客攻击,存在如下安全问题:暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞所以大部分网站及App都采取图形验证码或滑动验证码等交互解决方案,但在机器学习能力提......
  • 指针(3)的期末复习
    1.字符指针变量在指针的类型中我们知道有⼀种指针类型为字符指针char*代码constchar*pstr="hellobit.";特别容易让同学以为是把字符串到字符指针pstr⾥了,但是本质是把字符串hellobit放hellobit.⾸字符的地址放到了pstr中。 #include<stdio.h>intmain......
  • 【视频教程】手把手AppWizard轻松制作一个emWin滑动主界面控制框架,任意跳转控制(2024-0
    现在的新版AppWizard已经比较好用,用户可以轻松的创建各种项目常规界面。比如早期创建一个支持滑动的主界面框架,并且可以跳转各种子界面,仅仅界面布局和各种图片格式转换都要花不少时间,而现在使用AppWizard,可以说轻轻松松,毫不费力。用户唯一要做的就是根据自己的芯片性能做一定的......
  • 重生之霸道C语言爱上我之走入指针(3)
    根据前两篇与指针的初步接触后,我们已经了解到了指针里面最基本的知识,而接下来的文章,将会更注重于指针的深入理解和运用。1.数组名的理解1.1arr,即一个数组的数组名的理解在上一篇文章1.1里面的代码中,我们在用指针访问数组内容的时候,有这样的代码:intarr[10]={1,2,3,4,5,6......
  • [HarmonyOS Next示例代码]流畅滑动页面
    HarmonyOS next示例代码全集PageSlip:本项目是一个基于ArkTS的应用程序,基于伙伴高频使用场景,构建复杂的流畅滑动页面,滑动时不丢帧。流畅滑动页面简介本项目是一个基于ArkTS的应用程序,基于伙伴高频使用场景,构建复杂的流畅滑动页面,滑动时不丢帧。效果预览工程目录├......
  • VUE0003:Naive UI库:滑动条,单选,多选组件
    1,滑动条,单选,多选组件 <template><n-scrollbarclass="show-scrollbar"><n-spaceclass="map-setting"vertical><n-spacestyle="flex-flow:row;align-items:center;"><n-textclass=&q......
  • E31.【C语言】练习:指针运算习题集(上)
    Exercise1求下列代码的运行结果#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d",*(ptr-1)); return0;}答案速查:分析:Exercise2 求下列代码的运行结果//在x86环境下//假设结构体的大小是20个字节......
  • Selenium实现滑动滑块验证码验证
    你是否在自动化测试中被滑块验证码“挡住了去路”?随着反爬虫技术的普及,滑动滑块验证码越来越多地出现在各大网站,防止自动化脚本的访问。这给测试人员带来了新的挑战——如何让自动化测试程序通过这种验证?今天我们就来探讨使用Selenium实现滑动滑块验证码验证的技巧与实战方法。......