int getMinSortLength(vector<int> arr, int len) { if(len <= 1) return 0; int maxLeft = arr[0]; int minRight = arr[len-1]; int start = 0; int end = len-1; for(int i = 1; i < len; i++){ if(arr[i] >= maxLeft){ maxLeft = arr[i]; }else{ start = i; } } for(int i = len-2; i >= 0; i--){ if(arr[i] <= minRight){ minRight = arr[i]; }else{ end = i; } } return start-end+1; }
n=int(input()) if n==0: print(0) else: arr=[int(i) for i in input().strip().split()] mx=arr[0];r=0; for i in range(len(arr)): mx=max(mx,arr[i]) if mx>arr[i]: r=i; mx=arr[-1];l=len(arr)-1; for i in reversed(range(len(arr))): mx=min(mx,arr[i]) if mx<arr[i]: l=i; print(max(0,r-l+1))
import java.util.*; public class ShortSubsequence { public int findShortest(int[] A, int n) { if(n <= 1) return 0; int maxLeft = A[0]; int minRight = A[n - 1]; int start = 0; int end = n - 1; //从左到右求无序时最右的位置 for(int i = 0; i < n; i++){ if(A[i] >= maxLeft){ maxLeft = A[i]; }else{ start = i; } } if(start == 0){ return 0; } //从右到左求无序时最左的位置 for(int i = n - 2; i >= 0; i--){ if(A[i] <= minRight){ minRight = A[i]; }else{ end = i; } } return start - end + 1; } }
public static void sort(char[] s){ char[] temp = s; int count = 0; int minIndex = -1,mMaxIndex = -1; boolean target = false; for(int i=0;i<temp.length;i++){ for(int j=i+1;j<temp.length;j++){ char c = temp[i]; char c1 = temp[j]; if(c > c1){ target = true; break; } } if(target){ minIndex = i; break; } } target = false; for(int i= temp.length-1;i>=0;i--){ for(int j=i-1;j>=0;j--){ char c = temp[i]; char c1 = temp[j]; if(c < c1){ target = true; break; } } if(target){ mMaxIndex = i; break; } } count = minIndex==-1?0: mMaxIndex-minIndex+1; System.out.println("count:"+count); }
public static int getMinSortLength(int[] arr) { if(arr.length==0){ return 0; } int max=arr[0]; int min=arr[0]; for(int i=1;i<arr.length;i++){ if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } if(min!=arr[0]&&max!=arr[arr.length-1]){ return arr.length; }else{ if(min==arr[0]){ int[] newarr=new int[arr.length-1]; for(int i=1;i<arr.length;i++){ newarr[i-1]=arr[i]; } return getMinSortLength(newarr); }else{ int[] newarr=new int[arr.length-1]; for(int i=0;i<arr.length-1;i++){ newarr[i]=arr[i]; } return getMinSortLength(newarr); } } }
public class Solution { private byte[] recArr; public int getMinSortLength(int[] arr) { int maxLength = 0; int recPoint = 0; if(arr.length == 0) return maxLength; recArr = new byte[arr.length]; for(int i = 1;i < arr.length; ++i) for(int j = i;j > 0; --j) if(arr[j - 1] > arr[j]){ recArr[i] = 1; recArr[j - 1] = 1; int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } else break; maxLength = recArr[0]; for(int i = 1;i < recArr.length; ++i){ if(recArr[i] > 0) recArr[i] = (byte) (recArr[i] + recArr[i - 1]); if(recArr[i] > maxLength) maxLength = recArr[i]; } return maxLength; } }
public int getLen(int[] arr){ //数组的复制 int [] arrSort = Arrays.copyOf(arr, arr.length); Arrays.sort(arrSort); int i = getMin(int[] arr, int []arrSort); int j = getMax(int[] arr, int []arrSort); return j==0?0:(j-i+1); } private int getMin(int[] arr1, int[] arr2){ int i; for(i = 0; i < arr1.length(); i ++){ if(arr1[i] == arr2[i]){ continue; }else{ return i; } } return arr1.length(); } private int getMax(int[] arr1, int[] arr2){ int j; for(j = arr1.length(); j>=0; j--){ if(arr1[j]==arr2[j]){ continue; }else{ return j; } } return 0; }