单调性的应用

1单调性

  • 应用场景:常应用于双指针的进一步优化问题中
  • 含义:针对指针 i 1 > i i1>i i1>i一定有 j 1 > = j j1>=j j1>=j或者 j 1 < = j j1<=j j1<=j
  • 这样我们就可以利用该性质对算法进行进一步优化,避免一些不必要的遍历

2. leetcode题目举例

在这里插入图片描述

思路分析

假设删除的是 a r r [ i + 1 ] ∼ a r r [ j − 1 ] arr[i+1]∼arr[j−1] arr[i+1]arr[j1]则需要满足以下条件

  • a r r [ 0 ] ∼ a r r [ i ] arr[0]∼arr[i] arr[0]arr[i]非递减。
  • a r r [ j ] ∼ a r r [ n − 1 ] arr[j]∼arr[n−1] arr[j]arr[n1]非递减
  • a r r [ i ] ≤ a r r [ j ] arr[i]≤arr[j] arr[i]arr[j]
    如果我们对所有满足条件的 i i i j j j进行一次二次遍历,则时间复杂度为O(lr)其中 l 为左半部分长度,r为右半部分长度
  • 我们尝试去寻找 i i i j j j的规律
  • 对于 左半部分的 x ( 左半部分非递减段 ) x(左半部分非递减段) x(左半部分非递减段) 我们假设 最小的 符合条件的 j j j y y y
  • 如果有 x 1 > x x1>x x1>x,则至少有 y 1 > = y y1>=y y1>=y优化的重要性质

证明(反证法)

  • 如果 y 1 < y y1<y y1<y
    则又因为
  • x 1 > x x1>x x1>x
  • a r r [ y 1 ] > = a r r [ x 1 ] arr[y1]>=arr[x1] arr[y1]>=arr[x1],
  • a r r [ x 1 ] > = a r r [ x ] arr[x1]>=arr[x] arr[x1]>=arr[x]
    所以 a r r [ y 1 ] > = a r r [ x ] arr[y1]>=arr[x] arr[y1]>=arr[x] 且, x , y 1 , y x,y1, y x,y1y 位于左右部分的非递减段,则 y 1 y1 y1 x x x 对应的最小答案,与先前定义不符

举例说明

我们以题中示例举例 (这里我们直接时候对应的值,括号中为下标,方便理解)

  • [1,2,3,10,4,2,3,5]
  • 1(0) 对应的最小的 j 为 为2(5)
  • 我们遍历 2(1)对应的 j 最小为 2(5) ,不可能在2(5)的前面寻找
  • 这就是我们所证明的性质的意思
class Solution {//单调性//对于任意的 i1>i//其对应的j 一定有 j1>=jpublic int findLengthOfShortestSubarray(int[] nums) {int n=nums.length;int j=n-1;//寻找最靠左的jwhile(j>=1 && nums[j]>=nums[j-1])j--;//J 为0说明本身就是非递减,无需删除if(j==0)return 0;//最长的删除长度,前半部分全部删除int res=j;//枚举 ifor(int i=0;i<n;){//寻找最小的符合条件的 jwhile(j<n && nums[i]>nums[j])j++;res=Math.min(res,j-i-1);//如果 i 还在非递减段则枚举下一个,否则,停止枚举if(i!=n-1 &&nums[i+1]>=nums[i])i++;else break;}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软人工智能办公AI工具 Copilot Pro 11项 Copilot 功能

Copilot&#xff08;曾用名 Bing Chat 和 Bing Chat Enterprise&#xff09;在此期间成为了许多用户的日常AI伴侣&#xff0c;并在正式发布后将继续为用户提供AI驱动的网络聊天体验。 微软Copilot官方网址链接&#xff1a;Microsoft Copilot: 你的日常 AI 助手 Copilot详情&am…

基于springboot+vue旅游网站

摘要 旅游网站的开发是一个综合性的项目&#xff0c;涉及到前端和后端的技术&#xff0c;而基于Spring Boot和Vue.js的组合是一种常见的选择&#xff0c;因为它们可以很好地配合&#xff0c;提供高效且现代化的开发体验。首先&#xff0c;我们使用Spring Boot作为后端框架。Spr…

centos系统安装Ward服务器监控工具

简介 Ward是一个简约美观多系统支持的服务器监控面板 安装 1.首先安装jdk yum install java-1.8.0-openjdk-devel.x86_64 2.下载jar wget 3.启动 java -jar ward-1.8.8.jar 体验 浏览器输入 http://192.168.168.110:4000/ 设置服务名设置为:myserver 端口号:5000 点击…

Rollup:打包 TypeScript - React 组件库

调用浏览器摄像头拍照组件 1、前提1、安装依赖2、添加 rollup.config.js 配置3、修改 package.json3.1 添加打包命令3.2 添加组件入口3.3 添加组件声明入口3.4 浏览器支持 1、前提 1.1 通过 create-react-app take-photo --template 创建前端应用 1.2 添加组件 TakePhoto (拍照…

3 - 主从复制结构|持久化|数据类型

主从复制结构&#xff5c;持久化&#xff5c;数据类型 主从复制 没有高可用功能命令行配置修改配置文件&#xff08;永久有效&#xff0c;重启了redis服务依然有效&#xff09; 配置带验证的主从复制主从从配置哨兵服务&#xff08;可实现高可用&#xff09;持久化RDB文件的使用…

幻兽帕鲁服务器多少钱一个?32元你敢信吗?4核16G

幻兽帕鲁服务器多少钱&#xff1f;价格便宜&#xff0c;阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月&#xff0c;4核32G配置113元1个月、339元3个月&#xff1b;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。阿腾云atengyun.com分享阿里云和腾讯云palwor…

网络通讯(20)-UDP协议应用实例网络聊天室

本文演示UDP协议应用,通过实例网络聊天室进行学习。 目录 实现多人聊天室的功能

关键点平滑算法笔记

目录 关键点卡尔曼滤波和低通滤波 alpahpose 是跟踪box的 关键点卡尔曼滤波和低通滤波 import numpy as npimport matplotlib.pyplot as plt# rShldrBend 0, rForearmBend 1, rHand 2, rThumb2 3, rMid1 4, # lShldrBend 5, lForearmBend 6, lHand 7, lThumb2 8, lMid1 9, #…

LEETCODE 164破解闯关密码

class Solution { public:string crackPassword(vector<int>& password) { //在比较两个字符串大小时&#xff0c;其实是按照字典序逐个比较它们的字符。首先比较两个字符串的第一个字符&#xff0c;如果它们不相等&#xff0c;则可以根据它们的 ASCII 码大小确定它们…

opencv012 滤波器04 中值滤波,双边滤波

中值滤波 取中位数&#xff0c;可以处理椒盐噪音 CV自带medianBlur函数dst cv2.medianBlur(src, ksize) 参数说明&#xff1a;1.src: 需要滤波的图片&#xff1b;2.ksize&#xff1a;核大小&#xff0c;必须是比1大的奇数【举个例子&#xff1a;3&#xff0c;5&#xff0c;7……

RISC-V RVWMO 内存模型解释

RISC-V RVWMO 内存模型解释 引言 本文介绍 RISC-V RVWMO 内存模型。RVWMO 内存模型定义了什么样的全局内存顺序才是合法的。本引言部分将解释为什么会出现不合法的全局内存顺序&#xff0c;以及为什么需要内存模型。 首先引起乱序的全局内存顺序&#xff08;指令重排序&…

React 表单、处理受控表单组件、非受控组件

React 表单处理 学习目标&#xff1a; 能够使用受控组件的方式获取文本框 使用 React 处理表单一般有两种方法 受控组件 &#xff08;推荐&#xff09;非受控组件 &#xff08;了解&#xff09; 1. 受控表单组件 什么是受控组件&#xff1f; input 框自己的状态被 React 组…

深度学习-Pytorch如何构建和训练模型

深度学习-Pytorch如何构建和训练模型 用pytorch如何构建模型&#xff0c;如何训练模型&#xff0c;如何测试模型&#xff1f; pytorch 目前在深度学习具有重要的地位&#xff0c;比起早先的caffe&#xff0c;tensorflow&#xff0c;keras越来越受到欢迎&#xff0c;其他的深度…

10.多柱状图(MuliBarChart)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 话接上回&#xff08;9.单柱状图&#xff08;SingleBarChart&#xff09;&#xff09;&#xff0c;从单柱拓展到多柱状图。 1.数据设置 private void InitValue(List<BasicSerieDto> dtos){Serie…

英文阅读-LinkedIn‘s Tips for Highly Effective Code Review

LinkedIn的CR技巧 LinkedIn团队CodeReview经验与方法&#xff0c;原文来自https://thenewstack.io/linkedin-code-review/ 总结 Do I Understand the “Why”? 在提交pr的同时需要描述本次修改的“动机”&#xff0c;有助于提高代码文档质量。 Am I Giving Positive Feedbac…

openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs

文章目录 openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs概述笔记END openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_…

Java转成m3u8,hls格式

Java转成m3u8,hls格式 需求分析 大致思路 循环文件夹下面所有文件判断当前文件是否是视频文件&#xff0c;如果是视频文件先转为ts文件 因为听别人说先转成ts之后再切片会快很多 转成ts文件&#xff0c;并为这些文件单独生成一个目录&#xff0c;如果目录不存在则新建一个目…

14.5 Flash查询和添加数据库数据

14.5 Flash查询和添加数据库数据 在Flash与数据库通讯的实际应用中&#xff0c;如何实现用户的登录与注册是经常遇到的一个问题。登录实际上就是ASP根据Flash提供的数据查询数据库的过程&#xff0c;而注册则是ASP将Flash提供的数据写入数据库的过程。 1.启动Access2003&…

C++Linux网络编程Day1

最简单server程序 #include <iostream>// sys&#xff08;系统&#xff09;,socket&#xff08;套接字&#xff09;&#xff0c;这个还是挺好理解的 #include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h> #include <string.h>int …

项目管理的细节:屁股决定脑袋

在我刚入行的时候&#xff0c;由于我勤奋好学&#xff0c;技术上钻研得比较深入&#xff0c;我曾一度自视甚高&#xff0c;甚至有些傲慢。那时&#xff0c;我年轻气盛&#xff0c;未能充分认识到自己的不足。我曾认为领导对我的评价不公&#xff0c;未能充分认识到我的能力和价…