LeetCode 581. 最短无序连续子数组
题目描述
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
示例 1:
输入:nums = [2,6,4,8,10,9,15]
输出:5
解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
最短无序连续子数组
提示:
1 <= nums.length <= 104
-105 <= nums[i] <= 105
一、解题关键词
二、解题报告
1.思路分析
新建数组
排序
进行数据比较 不一致则进行了排序
2.时间复杂度
3.代码示例
class Solution {
public int findUnsortedSubarray(int[] nums) {
int len = nums.length;
if(isSorted(nums)){
return 0;
}
int[] numsSorted = Arrays.copyOf(nums, len);
Arrays.sort(numsSorted);
int left = 0;
while(nums[left] == numsSorted[left]){
left ++;
}
int right = len - 1;
while(nums[right] == numsSorted[right]){
right --;
}
return right - left + 1;
}
boolean isSorted(int[] nums){
for(int i = 1; i<nums.length;i++){
if(nums[i] < nums[i - 1]){
return false;
}
}
return true;
}
}
2.知识点
部分有序的数组 联系二分的思想
总结
巧妙不巧妙!!!
该博客详细介绍了LeetCode581题目的解题过程,包括如何找到最短无序连续子数组并进行升序排序使整个数组有序。博主首先分析了问题关键,提出新建数组并排序,然后通过比较原数组与排序后数组的不同位置来确定无序子数组的边界。代码实现中,使用了双指针技巧,时间复杂度为O(n log n)。博客强调了解题思路的巧妙之处。
798

被折叠的 条评论
为什么被折叠?



