题目描述:
给定一个无序数组arr,求出需要排序的最短子数组的长度,对子数组排序后能使得整个数组有序,即为需要排序的数组。例如:arr=[1,5,3,4,2,6,7]返回4,因为只有[5,3,4,2]需要排序。
输入示例:
7
1 5 3 4 2 6 7
输出示例:
4
题目分析:
这道题呢,先从左边开始遍历,记录最大的数,和比最大的数小的最后的一个位置left;然后从右边开始遍历,记录最小的数,和比最小大的最前的一个位置right,那么需要排序的最短子数组长度为left-right+1。代码如下~
代码实现:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=sc.nextInt();
}
int max=nums[0];
int min=nums[n-1];
int left=0;
int right=n-1;
for(int i=1;i<n;i++){
if(max>nums[i]){
left=i;
}else{
max=nums[i];
}
}
for(int i=n-1;i>=0;i--){
if(min<nums[i]){
right=i;
}else{
min=nums[i];
}
}
System.out.println(left-right+1);
}
}