정수 배열을 감안할 때, 당신은 당신 만 오름차순으로이 부분 배열을 정렬 할 경우, 다음 전체 배열이 너무, 오름차순으로 정렬됩니다 하나 개의 연속적인 부분 배열을 찾을 필요가있다.
당신은 짧은 같은 부분 배열 및 출력 길이를 찾아야합니다.
예 1 :
INPUT : [2 ,. 6 ,. 4 ,. 8, 10 ,. 9, 15] 출력 :. 5 설명 : [합니다. 6 4 ,. 8 ,., 10 ,. 9] 당신은 정렬 할 필요가 오름차순으로 전체 배열이 오름차순으로 정렬합니다.
아이디어 :
먼저이 사건의 경우, 그것은 크게 중간을 증가되지 않으며, 최대 전류 값을 찾기보다 작은 여부를 확인하기 위해 바로 스윕 왼쪽에서 전달합니다. 마찬가지로, 오른쪽 스윕 전류 값이 발견 된 최소값보다 크다면, 중간 부분이 증가되지 않고 남아있다.
1 개 급 솔루션 { 2 공개 INT findUnsortedSubarray ( INT [] nums) { 3 경우 (nums == 널 || nums.length == 0 || nums.length == 1 ) 창 0 ; 4 INT 최대 =는 Integer.MIN_VALUE 최종 = - 1 ; 5 // 어레이의 처음부터 반복 처리는보다 작은 마지막 요소 발견 6 // 그 왼쪽에서 본 최종 최대 최종으로 표시 (7) 에 대한 ( INT I = 0; 난 nums.length를 <; 난 ++ ) { 8 최대 = Math.max (최대, nums [I]); 9 경우 (nums [I] < 최대) 10 단부 = I; (11) } (12) 의 경우 (최종 == - 1 ) 창 0 ; (13) (14) 의 INT - = 분에 Integer.MAX_VALUE이 시작 = 1 ; (15) 에 대한이 ( int로 난 nums.length = - 1 ; I> = 0 ; 난 ... ) { 16 분 = Math.min (분 nums [I]); 17 의 경우(nums은 [I]는> 분) 18 = 시작 난; 19 } 20 리턴 끝 - + 시작 1 ; 21 } 22 }