题目描述
给你一个整数数组 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 <= 104
-105 <= nums[i] <= 105
来源:力扣(LeetCode)
题目大意
题目很短。。。。
思路描述
只需找到这个数组中 第一个和 最后一个不是顺序排列的数即可
具体做法:
- 复制一个数组copyNums
- 对复制的数组进行排序
- 在nums中找到第一个和最后一个和排序后的copyNums不同的数分别记为left和right
- 返回nums的长度-left-right
代码
class Solution {
public int findUnsortedSubarray(int[] nums) {
//1:复制一个数组copyNums
int[] copyNums=new int[nums.length];
System.arraycopy(nums, 0, copyNums, 0, nums.length);
//2:对复制的数组进行排序
Arrays.sort(copyNums);
//3:在nums中找到第一个和最后一个和排序后的copyNums不同的数分别记为left和right
int left=0;
int right=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=copyNums[i]){
break;
}
left++;
}
for(int i=0;i<nums.length;i++){
if(nums[nums.length-i-1]!=copyNums[nums.length-i-1]){
break;
}
right++;
}
//4:返回nums的长度-left-right
return left==nums.length?0:nums.length-left-right;
}
}
写在最后
如果感觉写的还不错的话不妨分享给其他人,以求共同进步!
文章如有错误之处请指出,我会听取并改正!