음, 항상 작동하는 방법을 이해하는 것입니다 자신 만의 개인 시간 오프의 책을 볼 수 없습니다, 인정해야한다.
K는 번째 한마디에서 가장 큰 요소는 상관없이 배열은 색인을 통해 직접 액세스 할 수 있기 때문에, 당신은, 정렬, 위치를 확인해야 할 때 사용하는 알고리즘, 첫 번째 정렬 없다, 그래서 역순으로 배열을 정렬거야 배열을 찾아 선택 알고리즘의 측면 정렬 힙 큰 가기 힙을 사용하려고 시작하지만, 다음, 빠른 방전 성능이 더 나은 것, 그래서 우리는 빠른에왔다
다음과 같이 구체적인 아이디어가 있습니다 :
공간의 복잡성을하기 위해 시작은 O (1), 그래서 구덩이를 많이 밟지 때문에, 구덩이 직접, 가장 중립 위치를 찾을뿐만 아니라, 왼쪽 중간보다 작은 요소, 그것은 중간 위치를 이동하려고하지 않습니다 확인하는 것입니다 축소합니다. . . 비참 캉캉.
집 가까이 :
1. 우선 재귀를 사용하여 명확 빠른 행입니다
2. 두 번째 삼위안 선회 판정 방법의 사용, 즉 경계 요소는 왼쪽 선회보다 우측 요동보다 작지만 큰
3.있어서 재귀 크기 (k)의 어느 쪽을 결정
다음과 같이 구체적인 절차는 다음과 같습니다
1 개 패키지 알고리즘; 2 3 공용 클래스 이것은 QuickSort { 4 5 공중 INT findKthLargest ( INT [] nums, INT의 K) { (6) 의 경우 (nums.length < K) { 7 창 0 ; 8 } 9 퀵 (nums, 0, nums.length-1 , K); 10 11 복귀 nums [K-1 ]; 12 } 13 14 개인 공극 퀵 ( INT [] nums, INT왼쪽 INT 오른쪽 의 INT K) { 15 (16) INT의 중심 = (좌측 + 우측) / 2 ; 17 의 경우 (좌측> = 우측) { 18 창 ; 19 } 20 INT의 피봇 = chosePivot (nums, 좌, 우, 중앙); (21) (22) 의 INT I = 1 + 왼쪽 ; 23 의 INT J = 오른쪽-1 ; 24 일 동안은 (나는 < J)를 { 25 일 동안 (nums [내가 ++]> = nums [센터] && 난 < 센터) { 26 I ++ ; (27) } 28 동안 (nums [j--] <nums [센터] && J> 센터) { 29 j-- ; 30 } 31 32 경우 (nums [I] <= 피봇 && 피봇 <= nums [J]) { 33 스왑 (nums, I, J); 34 의 경우 (I == 센터) { 35 센터 = J; 36 } 다른 경우 (j == 센터) { 37 센터 = I; 38 } 39 } 40 } (41) 의 경우 (K <= 센터) { 42 퀵 (nums, 왼쪽, 가운데, K); 43 } 다른 경우 (K> 센터) { 44 퀵 (nums 센터 + 1 , 오른쪽, K); 45 } 46 47 48 } 49 50 개인 INT chosePivot ( INT [] nums, int입니다 왼쪽 INT 오른쪽 INT의 중심) { 51 의 경우 (nums [오른쪽]> nums [중심]) { 52 스왑 (nums, 우측, 센터) ; 53 (54) } (55) 의 경우 (nums [좌측] < nums [오른쪽]) { 56 스왑 (nums, 왼쪽, 오른쪽); 57 (58) } (59) (60) 의 경우 (nums [좌측] < nums [중심]) { 61 스왑 (nums, 왼쪽 센터); 62 } 63 64 65 복귀 nums [중심]; 66 (67) } (68) (69) 전용 공간 스왑 ( 값 int [] nums을 하는 int 왼쪽 int로 오른쪽) { 70 INT의 온도 =nums [좌측]; 71 nums [좌측]가 = nums [오른쪽]; 72 nums [오른쪽] = 온도를; 73 } 74 75 공공 정적 무효 메인 (문자열 []에 args) { 76 INT [] = nums 새로운 INT [] {3,2,1,5,6,4 }; (77) (78) 이것은 QuickSort 정렬 = 새로운 이것은 QuickSort (); 79 (80) 81 에서 System.out.println (sort.findKthLargest (nums, 2 )); (82) 에 대해 ( int로 I : nums)을 { 83 System.out.print (I); (84) } 85 } 86 87 88 }
최적화 문제를 고려하는 것까지가-에 따라, 그래서 첫 공연은