【LeetCode】581.最短无序连续子数组

news/2024/10/17 5:38:12/

题目

给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

请你找出符合题意的 最短 子数组,并输出它的长度。

示例 1:

输入:nums = [2,6,4,8,10,9,15]
输出:5
解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

示例 2:

输入:nums = [1,2,3,4]
输出:0

示例 3:

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

提示:

  • 1 <= nums.length <= 10^4
  • -10^5 <= nums[i] <= 10^5

解答

源代码

class Solution {public int findUnsortedSubarray(int[] nums) {if (isSorted(nums)) {return 0;}int[] numsSorted = new int[nums.length];System.arraycopy(nums, 0, numsSorted, 0, nums.length);Arrays.sort(numsSorted);int left = 0;while (nums[left] == numsSorted[left]) {left++;}int right = nums.length - 1;while (nums[right] == numsSorted[right]) {right--;}return right - left + 1;}public boolean isSorted(int[] nums) {for (int i = 1; i < nums.length; i++) {if (nums[i] < nums[i - 1]) {return false;}}return true;}
}

总结

既然这个数组有一部分元素进行升序排序后整个数组都会变成升序排列,那么最后得到的升序排列数组和一开始的原数组相比,只有中间连续的一部分不同。那么我们将原数组复制一份,把复制得到的数组进行排序,然后对比元素得到不同部分的左右边界,以得到这个子数组的长度。


http://www.ppmy.cn/news/1043675.html

相关文章

管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——支持加强——第四节——分类4——比例支持

文章目录 第四节 支持加强-分类4-比例支持题-支持加强-分类4-比例支持(数据支持)-同比削弱,差比支持真题(2011-54)-支持加强-分类4-比例支持(数据支持)-同比削弱,差比支持第四节 支持加强-分类4-比例支持 题-支持加强-分类4-比例支持(数据支持)-同比削弱,差比支持…

ISBN号码(NOIP2008 普及组第一题)

ISBN号码 说明 每一本正式出版的图书都有一个ISBN号码与之对应&#xff0c;ISBN码包括9位数字、1位识别码和3位分隔符&#xff0c;其规定格式如“x-xxx-xxxxx-x”&#xff0c;其中符号“-”就是分隔符&#xff08;键盘上的减号&#xff09;&#xff0c;最后一位是识别码&#x…

跟着美团学设计模式(感处)

读了着篇文章之后发现真的是&#xff0c;你的思想&#xff0c;你的思维是真的比比你拥有什么技术要强的。 注 开闭原则 开闭原则&#xff08;Open-Closed Principle&#xff09;是面向对象设计中的基本原则之一&#xff0c;它的定义是&#xff1a;一个软件实体应该对扩展开放…

noip2017普及组初赛 快速幂 求x^p%m的值。

说明 求xp mod m x^p \bmod m xpmodm 的值。 输入格式 三个不超过 10000 的正整数 x&#xff0c;p&#xff0c;m。 输出格式 1个整数。 样例 输入数据 1 2 10 100 Copy 输出数据 1 24 Copy 提示 noip2017普及组初赛 #include<bits/stdc.h> using namespace std; long l…

Linux 黑话解析:什么是 LUKS 加密?

导读LUKS 是 Linux 用户中流行的磁盘加密机制。在这篇术语解析文章中&#xff0c;可以了解更多关于 LUKS 的信息。 计算机安全旨在保护私密信息。有许多方法可以保护系统。一些用户使用简单的用户名/密码登录方案进行基本保护。其他用户可能会通过加密以不同的方式增加额外的保…

工具推荐:Chat2DB一款开源免费的多数据库客户端工具

文章首发地址 Chat2DB是一款开源免费的多数据库客户端工具&#xff0c;适用于Windows和Mac操作系统&#xff0c;可在本地安装使用&#xff0c;也可以部署到服务器端并通过Web页面进行访问。 相较于传统的数据库客户端软件如Navicat、DBeaver&#xff0c;Chat2DB具备了与AIGC…

Rust语法:所有权引用生命周期

文章目录 所有权垃圾回收管理内存手动管理内存Rust的所有权所有权转移函数所有权传递 引用与借用可变与不可变引用 生命周期悬垂引用函数生命周期声明结构体的生命周期声明Rust生命周期的自行推断生命周期约束静态生命周期 所有权 垃圾回收管理内存 Python&#xff0c;Java这…

3.物联网LWIP之socket编程

一。Socket编程的基本概念 在我看来Socket就相当于API&#xff0c;就是函数接口&#xff0c;我们使用Socket就可以在不清楚底层原理的基础上进行通信&#xff0c;即Socket会帮助我们处理好网络的Ip地址等。下图就清晰的展示了Socket的位置&#xff0c;作为用户层与其他层的交互…