Leetcode.1574 删除最短的子数组使剩余数组有序

题目链接

Leetcode.1574 删除最短的子数组使剩余数组有序 Rating : 1932

题目描述

给你一个整数数组 arr,请你删除一个子数组(可以为空),使得 arr中剩下的元素是 非递减 的。

一个子数组指的是原数组中连续的一个子序列。

请你返回满足题目要求的最短子数组的长度。

示例 1:

输入:arr = [1,2,3,10,4,2,3,5]
输出:3
解释:我们需要删除的最短子数组是 [10,4,2] ,长度为 3 。剩余元素形成非递减数组 [1,2,3,3,5] 。
另一个正确的解为删除子数组 [3,10,4] 。

示例 2:

输入:arr = [5,4,3,2,1]
输出:4
解释:由于数组是严格递减的,我们只能保留一个元素。所以我们需要删除长度为 4 的子数组,要么删除 [5,4,3,2],要么删除 [4,3,2,1]。

示例 3:

输入:arr = [1,2,3]
输出:0
解释:数组已经是非递减的了,我们不需要删除任何元素。

示例 4:

输入:arr = [1]
输出:0

提示:

  • 1 < = a r r . l e n g t h < = 1 0 5 1 <= arr.length <= 10^5 1<=arr.length<=105
  • 0 < = a r r [ i ] < = 1 0 9 0 <= arr[i] <= 10^9 0<=arr[i]<=109

解法:双指针

可以将原数组 arr看成三段。这三段中的任何一段都可能为空。

在这里插入图片描述
先用一个指针 j,将其移动到 第二段非递减区间的起始位置

再用一个指针 i,初始指向 第一段非递减区间的起始位置

在这里插入图片描述移动指针 i(最多移动到 第一段非递减区间的结束位置),对于 arr[i],指针 j也要向后移动(若一开始 arr[i] <= arr[j]则不用),使 arr[i] <= arr[j]

这样 (i , j)中间这一段就是我们需要删除的子数组,长度为 j - i - 1。我们每一次用一个答案 ans更新最小的子数组长度即可。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    int findLengthOfShortestSubarray(vector<int>& arr) {
        int n = arr.size();
        int j = n - 1;
        while(j - 1 >= 0 && arr[j] >= arr[j-1]) j--;

        int ans = j;
        if(ans == 0) return ans;

        for(int i = 0;i == 0 || arr[i-1] <= arr[i];i++){
            while(j < n && arr[i] > arr[j]) j++;
            ans = min(ans, j - i - 1);
        }

        return ans;
    }
};

Python代码:

class Solution:
    def findLengthOfShortestSubarray(self, arr: List[int]) -> int:
        n = len(arr)
        j = n - 1
        while j - 1 >= 0 and arr[j] >= arr[j - 1]:
            j -= 1
        ans = j
        if ans == 0:
            return ans

        i = 0
        while i == 0 or arr[i-1] <= arr[i]:
            while j < n and arr[i] > arr[j]:
                j += 1
            ans = min(ans,j-i-1)
            i += 1

        return ans

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macOS 13.3 正式版(22E252)黑苹果恢复版镜像

镜像特点&#xff08;需要下载可以搜索&#xff1a;黑果魏叔&#xff09; 系统介绍 3 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.3 更新&#xff08;内部版本号&#xff1a;22E252&#xff09;苹果今天还发布了macOS Monterey 12.6.4和macOS Big Sur …

【Paper】2016_基于LQR的多智能体系统协同最优控制_姚蒙

姚蒙. 基于LQR的多智能体系统协同最优控制[D].华南理工大学,2016. 文章目录第四章 线性离散时间多智能体系统协同最优控制4.1 引言4.2 离散时间多智能体系统一致最优控制4.3 离散时间领导者-跟随者系统跟踪最优控制4.4 数值仿真Ref第四章 线性离散时间多智能体系统协同最优控制…

c语言基础知识——字符串和内存函数(上)

目录 前言 一、求字符串长度 strlen 注意要点 strlen的模拟实现 二、长度不受限制的字符串函数 strcpy 注意要点 模拟实现 strcat 注意要点 模拟实现 strcmp 注意要点 模拟实现 三、长度受限制的字符串函数 strncpy 注意要点 模拟实现 strncat 注意要点 …

陪了我‘十几年‘的电脑,有必要升级到固态硬盘吗?

前言真的有人给十几年前的老电脑升级吗&#xff1f;当下网店SATA SSD的月销量居然高达数千单&#xff0c;DDR3内存销量也不低&#xff0c;这些可主要是老电脑升级用的啊。这十几年前的电脑是否还具有升级使用的价值&#xff1f;我们可以结合实际案例再来看看。我自己的"第…

langchain学习4

langchain学习4 原文地址: Chatbot Memory with Langchain | Pinecone An introduction to different conversational memory types for building chatbots and other intelligent …… Conversational memory 是聊天机器人能够以a chat-like manner 回应多个queries的方式。它…

hexo 搭建个人博客记录

看B站的程序羊的关于搭建hexo博客的方法自己搭了一个博客&#xff0c;链接是 手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo 下面就视频所讲做做笔记&#xff0c;以后可以回来查看&#xff0c;推荐小伙伴想搭建hexo博客的可以去看看这个视频。 1. 安装Node.js…

理解浏览器的进程与线程

Chrome架构&#xff1a;仅仅打开了1个页面&#xff0c;为什么有4个进程区分进程与线程浏览器是多进程的浏览器的渲染进程是多线程的多标签之间怎么通信 Chrome架构 -仅仅打开了1个页面 区分进程与线程 线程和进程都是 cpu 工作时间片的一个描述进程是cpu资源分配的最小单位…

点击器自动点击器,让你的屏幕操作变得更加简单

点击器自动点击器&#xff0c;也被称为屏幕点击器或鼠标连点器&#xff0c;是一种能够模拟人类点击行为的工具。它可以在特定时间间隔内自动执行鼠标点击操作&#xff0c;来代替用户手动点击屏幕。这种工具通常运行在Windows、MacOS和Linux等操作系统上&#xff0c;并可以与其他…

Python的加密与解密,你知道几类?

人生苦短&#xff0c;我用python python 安装包资料:点击此处跳转文末名片获取 据记载&#xff0c; 公元前400年&#xff0c; 古希腊人发明了置换密码。 1881年世界上的第一个电话 保密专利出现。 在第二次世界大战期间&#xff0c; 德国军方启用“恩尼格玛”密码机&#xff0…

【C++进阶】右值引用和移动语义

文章目录1. 引言2. 不同值的辨析3. &&的特性4. 左值引用和右值引用5. 右值引用优化性能6. 引用和右值引用使用场景7. 移动语义8. forward完美转发9. emplace_back10. 无序容器① map和unordered_map的区别② set和unordered_set的区别1. 引言 C11中引入了右值引用和移…

chatgptApi 文档使用以及 Demo演示

前言&#xff1a;最近chatGpt 很火爆&#xff0c;搞得国内某度都按耐不住了&#xff0c;开始搞‘文心一言’了。体验到了ChatGPT的强大之后&#xff0c;那么我们会想&#xff0c;如果我们想基于ChatGPT开发一个自己的聊天机器人&#xff0c;这个能搞定吗&#xff1f; ChatGPT平…

svelte + vite 开发 Web Components

引言最近要做一个跨平台使用的卡片插件&#xff0c;考虑到插件的通用性&#xff0c;就选择了Web Components技术来实现Web Components 概念Web Components 是一套不同的技术&#xff0c;允许你创建可重用的定制元素&#xff08;它们的功能封装在你的代码之外&#xff09;并且在…

字节跳动软件测试岗,收到offer后我却拒绝了 给面试的人一些忠告...

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是2年。我想说的是&#xff0c;但凡有点机会&#xff0c;千万别去外包&#xff01; 在深思熟虑过后&am…

字节跳动软件测试岗,前两面过了,第三面被面试官吊打,结局我哭了

阎王易见&#xff0c;小鬼难缠。我一直相信这个世界上好人居多&#xff0c;但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里&#xff0c;我只想告诫大家&#xff0c;offer一定要拿到自己的手里才是真的&#xff0c;口头offer都是不牢靠的&#xff0…

JDK 中用到了哪些设计模式?

以下是整理的⼏个在JDK 库中 常⽤的⼏个设计模式。桥接模式这个模式将抽象和抽象操作的实现进⾏了解耦&#xff0c;这样使得抽象和实现可以 独⽴地变化。 在Java 应⽤中&#xff0c;对于桥接模式有⼀个⾮常典型的例⼦&#xff0c;就是应⽤程序使⽤ JDBC 驱动程序进⾏开发的⽅式…

【YOLO】YOLOv5+Deep Sort 实现MOT评估(开源数据集+自定义数据集)

引言 YOLOv5Deep Sort 实现目标跟踪&#xff0c;并利用MOTChallengeEvalKit实现多目标跟踪结果的评估。 YOLOv5Deep Sort 实现目标跟踪可以参考笔者的【YOLOv5】yolov5目标识别DeepSort目标追踪 实现步骤 1 安装MATLAB 安装MATLAB MATLAB是一款商业数学软件&#xff0c;用于…

蓝牙耳机哪个品牌便宜好用?2023年性价比高的蓝牙耳机推荐

随着近几年蓝牙耳机的发展&#xff0c;不少人会在外出时选择佩戴蓝牙耳机&#xff0c;一是为了方便&#xff0c;二也是因为蓝牙耳机的性能越来越丰富。2023年了&#xff0c;有没有便宜好用的蓝牙耳机品牌呢&#xff1f;在此&#xff0c;我来给大家推荐几款性价比高的蓝牙耳机&a…

n个字符串排序(指针数组实现)

输入n和n个字符串(每个字符串不超过80个字符)请排序后输出&#xff0c;要求使用指针数组(而不是二维字符数组)处理 可以使用指针数组和动态内存分配来实现&#xff0c;具体思路如下&#xff1a; 首先读入字符串的个数 n&#xff1b;使用 malloc 函数动态分配一个指针数组 strA…

Python入门(4)语法、变量和标识符、数据类型、字符串、布尔值、类型检查、对象、类型转换、运算符

Python入门&#xff08;4&#xff09; 目录Python入门&#xff08;4&#xff09;一、几个基本概念1、表达式2、语句3、程序&#xff08;program&#xff09;4、函数&#xff08;function&#xff09;4.1 函数的分类内置函数&#xff1a;自定义函数4.2函数的两个要素参数返回值二…

FPGA可以转IC设计吗?需要学习哪些技能?

曾经在知乎上看到一个回答“入职做FPGA&#xff0c;后续是否还可以转数字IC设计&#xff1f;” 从下面图内薪资就可以对比出来&#xff0c;对比FPGA的行业薪资水平&#xff0c;IC行业中的一些基础性岗位薪资比很多FPGA大多数岗位薪资都要高。 除了薪资之外更多FPGA转IC设计的有…
最新文章