给定一个int整数数组A及其大小n,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,即找出符合条件的最短序列。请返回一个二元组,元组的两个元素分别代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。要求A中元素均为正整数。
测试样例:
[1,4,6,5,9,10],6
返回:[2,3]
import java.util.*; public class Rearrange { public int[] findSegment(int[] A, int n) { // write code here int[] ATemp=new int[n]; System.arraycopy(A, 0, ATemp, 0, n); Arrays.sort(ATemp); int left=0; while(left < n){ if(ATemp[left] != A[left]) break; left++; } int right=n-1; while(right >= 0){ if(ATemp[right] != A[right]) break; right--; } if(left==n || right==0) return new int[2]; else{ int[] ret={left, right}; return ret; } } }
import java.util.*; public class Rearrange { public int[] findSegment(int[] A, int n) { // write code here int[] B=new int[n]; for(int i=0;i<n;i++){ B[i]=A[i]; } Arrays.sort(A); int x=0; int y=n-1; boolean x_flag=false; boolean y_flag=false; while(x<y){ if(B[x]!=A[x]){ x_flag=true; } if(!x_flag){ x++; } if(B[y]!=A[y]){ y_flag=true; } if(!y_flag){ y--; } if(x_flag && y_flag){ break; } } if(x>=y) return new int[]{0,0}; else return new int[]{x,y}; } }