题目:对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。给定一个整数数组A及它的大小n,请返回最短子数组的长度。1,5,3,4,2,6,7],7 返回:4
思路:将数组排序再和原数组比较有多少位连续的不同,有可能一段不同中某一位相同,当时这个不能算,所以从两端扫描数组,直到某一位不同时跳出,然后求区间。
public int findShortest(int[] A, int n) { int[] B=new int[n]; int s=0,e=0; for(int i=0;i<n;i++) B[i]=A[i]; Arrays.sort(A); for(int i=0;i<n;i++){ if(A[i]!=B[i]){ s=i; break; } } for(int i=n-1;i>=0;i--){ if(A[i]!=B[i]){ e=i; break; } } if(e>s) return e-s+1; else return 0; }