LeetCode算法题-Shortest Unsorted Continuous Subarray(Java实现)

RT-Thread实战:手把手教你用STM32F04ZGT6通过SPI驱动BMI088(附完整工程) 本文详细介绍了如何使用RT-Thread操作系统在STM32F04ZGT6上通过SPI接口驱动BMI088高性能6轴惯性传感器(包含陀螺仪和加速度计)。从硬件连接到软件配置,再到数据采集与处理,提供了完整的开发指南和优化技巧,帮助开发者快速实现精确的姿态测量功能。 阅读详情

这是悦乐书的第267次更新,第281篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第134题(顺位题号是581)。给定一个整数数组,找到一个连续的子数组,按升序对该子数组进行排序,使得整个数组也按升序排序。找到最短的无序连续子数组并输出其长度。例如:

输入:[2,6,4,8,10,9,15]
输出:5
说明:按升序对[6,4,8,10,9]子数组进行排序,以使整个数组按升序排序。

注意:

  • 数组的长度在[1,100]范围内。

  • 数组可能包含重复项,因此这里的升序表示<=。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:数组第一个元素大于数组最后一个元素,直接返回整个数组的长度即可。

正常情况:使用两层for循环,外层循环每次获取到一个元素,内层循环就从其后面一位开始,往后比较,如果当前元素比后面的元素大,将其索引记录下来,如果后面遇到了更大的元素,就将索引更新为较大的索引,此索引将作为结束位置索引。

而外层循环用来参与比较的当前元素,在当前元素比后面的元素大时,保留当前元素的索引,如果后面继续出现,就取其中较小的,此索引将作为开始位置索引。最后,如果结束位置的索引值大于开始位置的索引值,就两者相减并加1,反之返回0,表示数组有序。

此解法的时间复杂度是O(n^2),空间复杂度是O(1)。

public int findUnsortedSubarray(int[] nums) {
    if (nums[0] > nums[nums.length-1]) {
        return nums.length;
    }
    int start = 0, end = nums.length;
    for (int i=0; i<nums.length-1; i++) {
        for (int j=i+1; j<nums.length; j++) { 
            if (nums[i] > nums[j]) {
                start = Math.max(start, j);
                end = Math.min(end, i);
            }
        }
    }
    return start - end > 0 ? start - end + 1 : 0;
}

03 第二种解法

特殊情况:数组第一个元素大于数组最后一个元素,直接返回整个数组的长度即可。

正常情况:将数组复制一份出来,然后对复制的数组进行排序,再和原数组进行比较,从头和尾分别循环比较,最后找到起始索引,做减法再加1,就是最短无序连续子数组的长度。

此解法的时间复杂度是O(n log(n)),空间复杂度是O(n)。

public int findUnsortedSubarray2(int[] nums) {
    if (nums[0] > nums[nums.length-1]) {
        return nums.length;
    }
    int[] temp = nums.clone();
    Arrays.sort(temp);
    int start = 0, end = nums.length-1;
    while (start < nums.length && nums[start] == temp[start]) {
        start++;
    }
    while (end > start && nums[end] == temp[end]) {
        end--;
    }
    return end - start + 1;
}

04 第三种解法

定义数组的最大值为数组第一个元素,最小值为倒数第一个元素,从数组第二个元素开始,每次拿当前元素与最大值比较,取较大的一个,拿最小值与倒数第二个(从后往前递增)元素比较取较小的一个,如果最大值大于当前元素,就把当前元素的索引赋值给end,如果最小值小于倒数第二个(从后往前递增)元素,就把倒数第二个(从后往前)元素的索引值赋值给start,最后做减法再加1,要是数组是有序的,最后返回的是0,所以end的初始值为-2,start的初始值为-1。

次解法的时间复杂度是O(n),空间复杂度是O(1)。

public int findUnsortedSubarray3(int[] nums) {
    if (nums[0] > nums[nums.length-1]) {
        return nums.length;
    }
    int n = nums.length, start = -1, end = -2;
    int min = nums[n - 1], max = nums[0];
    for (int i = 1; i < n; ++i) {
        max = Math.max(max, nums[i]);
        min = Math.min(min, nums[n - 1 - i]);
        if (max > nums[i]) {
            end = i;
        }
        if (min < nums[n - 1 - i]) {
            start = n - 1 - i;
        }
    }
    return end - start + 1;
}

05 小结

算法专题目前已日更超过四个月,算法题文章134+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

在ubuntu20.04中安装MATLAB时常见问题及解决方法    如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release    阅读详情

相关推荐

Claude Code教程(二) | Claude Code 核心信息与使用指南

Claude Code 核心信息与使用指南

qq_20236937的博客 2182

数组的排序&查找

HBU OJ004 冒泡排序(Bubble Sort) 也称为沉降排序(Sinking Sort),之所以称其为冒泡排序,是因为算法中值相对较小的数据会像水中的气泡一样逐渐上升到数组的最顶端。与此同时,较大的数据逐渐地下沉到数组的底部。这个处理过程需在整个数组范围内反复执行多遍。每一遍执行时,比较相邻的两个元素。若顺序不对,则将其位置交换,当没有数据需要交换时,数据也就排好序了。编程将排序函数Da...

绀香零八的博客 2457

RAG 赋能客服机器人:多轮对话与精准回复

在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言模型(LLM)与外部知识库,为解决这一问题提供了创新路径。本文将深入探讨 RAG 在客服机器人中的应用,重点分析其如何实现多轮对话与精准回复,并结合实际案例与技术框架展开讨论。

shuizhudan223的博客 2141

工大SSE(中等难度)

sse

weixin_45535091的博客 5135

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见)

本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。

weixin_30872499的博客 465

UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制解析

本文深入解析了UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制,详细介绍了时钟布线架构、SLR区域限制及Vivado工程配置要点。通过实际案例和优化建议,帮助工程师解决高速串行通信中的时钟共享问题,提升系统性能。

weixin_29280219的博客 630

将10个整数进行升序排序

将10个整数进行升序排序

2301_81485935的博客 1580

信号编辑软件ZX/SignalEditing

信号编辑软件ZX/SignalEditing

weixin_45661395的博客 955

LeetCode-581:Shortest Unsorted Continuous Subarray (最短未排序连续子数组) -- easy

给定整数数组,找到一个最短的连续的未按照升序排序的最短子数组,返回子数组的长度

大树先生的博客 2753

【Web实战】微信小程序逆向

2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

若有战,召必回 1943

医学图像处理实战:3D Slicer从安装到病灶分析全流程指南

本文提供了一份详尽的3D Slicer实战指南,涵盖从软件安装、DICOM数据导入到图像增强、病灶分割及三维可视化的全流程。重点演示了如何利用阈值分割、区域生长等核心图像处理技术进行病灶分析,并生成定量报告,是医学影像分析初学者的实用入门教程。

weixin_29278805的博客 600

581. Shortest Unsorted Continuous Subarray

Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too.You need to find the

xdhc的博客 287

机器人常用坐标系详解:原理、获取方法及实战实例

本文系统阐述了机器人四大核心坐标系(世界、基、工具、工件)的原理与标定方法。世界坐标系提供全局参考基准,基坐标系绑定机器人本体,工具坐标系定义末端执行器位置,工件坐标系则锁定作业对象位置。通过齐次变换矩阵实现各坐标系间的关联转换。重点介绍了三类标定技术:手动设定法(世界坐标系)、三点/六点法(工具TCP标定)和视觉识别法(工件标定),并以工业机械臂上下料为例演示了完整应用流程。随着技术发展,自动化标定、动态坐标系等新趋势将进一步提升机器人作业精度与效率。

start_up_go的博客 512

LeetCode刷题【Array】 Shortest Unsorted Continuous Subarray

【题目】  Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You

Simoncode 669

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

leetcode Shortest Unsorted Continuous Subarray

Java leetcode 数组里找到排序混乱的最短连续数组

u010412904的博客 241

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

581. Shortest Unsorted Continuous Subarray*

581. Shortest Unsorted Continuous Subarray* https://leetcode.com/problems/shortest-unsorted-continuous-subarray/ 题目描述 Given an integer array, you need to find one continuous subarray that if you only ...

珍妮的选择的博客 255

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode 581. Shortest Unsorted Continuous Subarray

题目 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。 说明 : 输入的数组长度范围在 [1, 10,000]。 输入...

Infi_zc 271

LeetCode Top 100 Liked Questions 581. Shortest Unsorted Continuous Subarray (Java版; Easy)

welcome to my blog LeetCode Top 100 Liked Questions 581. Shortest Unsorted Continuous Subarray (Java版; Easy) 题目描述 Given an integer array, you need to find one continuous subarray that if you only sort...

littlehaes的博客 164

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 LeetCode581. Shortest Unsorted Continuous Subarray 示例 1: 输入: ...

weixin_30868855的博客 193

581. Shortest Unsorted Continuous Subarray (LeetCode)

Description: Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, to...

weixin_30247159的博客 164

[leetcode]581. Shortest Unsorted Continuous Subarray

Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to fin

kangbin825的专栏 1240

LeetCode-581. Shortest Unsorted Continuous Subarray (JAVA)最短未排序数组

LeetCode-581. Shortest Unsorted Continuous Subarray (JAVA)最短未排序数组

mine_song的博客 1853

LeetCode Shortest Unsorted Continuous Subarray

题意:给出一个数组,求其最小的无序数组,这个无序数组经过排序后,整个数据也是排好序的 思路:将数据排序,然后与原来的数组比较,从开始找到不相等的位置,然后从尾部开始找到不相等的位置,两个位置差就是最小无序数组的长度 代码如下: public class Solution { public int findUnsortedSubarray(int[] nums) { i

多看多听多总结 435

LeetCode-Shortest Unsorted Continuous Subarray

LeetCode Java Shortest Unsorted Continuous Subarray

坟头草一米七五 188

【Leetcode-Easy-581】Shortest Unsorted Continuous Subarray

【Leetcode-Easy-581】Shortest Unsorted Continuous Subarray题目Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array w

LYZ 795

LeetCode(581):最短无序连续子数组 Shortest Unsorted Continuous Subarray(Java)

2019.10.27 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这道题根本的思路是要找到无序子数组的左边界和右边界,有三种方法: 1.排序 对原数组进行排序,将排序后的数组与原数组进行比较,找出最左和最右开始不对应的结点。可以从首尾进行顺序遍历,也可以用二分搜索。 ...

NJU_ChopinXBP的博客 336
上一篇: LeetCode算法题-Distribute Candies(Java实现)
下一篇: LeetCode算法题-N-ary Tree Preorder Traversal(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值