You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
정렬하면 쉽지만 안하고 풀어야 한다. quick sort를 응용한 quick select 알고리즘을 쓰면 된다.
quick sort와 비슷하게 피벗을 잡고 피벗 기준으로 왼쪽은 더 큰 값들, 오른쪽에는 더 작은 값들을 몰아 넣는다. 여기서 포인트는 quick select는 정렬이 필요가 없으므로 왼쪽, 오른쪽 기준으로 한 덩어리만 체크해주면 된다.
k가 왼쪽 배열보다 작다면 왼쪽 배열 내에서 k 번째 수를 찾으면 된다.
n + n/2 + n/4 + ... 으로 줄어서 시간 복잡도는 O(n). 물론 운이 아주 나쁘다면 O(n^2)겠지만 평균은 O(n) 이다.
메모리 제한은 따로 없으므로 구현이 간단하게 배열 복사 방식으로 구현하면 좋다. (in-place로 배열 원소 교체도 가능한데 코드가 꽤 지저분하다)
This discussion was converted from issue #150 on September 15, 2026 11:13.
Heading
Bold
Italic
Quote
Code
Link
Numbered list
Unordered list
Task list
Attach files
Mention
Reference
Menu
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Problem link
https://leetcode.com/problems/kth-largest-element-in-an-array/
Problem Summary
배열에서 정렬 없이 k 번째 큰 수를 찾는 문제
Solution
정렬하면 쉽지만 안하고 풀어야 한다. quick sort를 응용한 quick select 알고리즘을 쓰면 된다.
quick sort와 비슷하게 피벗을 잡고 피벗 기준으로 왼쪽은 더 큰 값들, 오른쪽에는 더 작은 값들을 몰아 넣는다. 여기서 포인트는 quick select는 정렬이 필요가 없으므로 왼쪽, 오른쪽 기준으로 한 덩어리만 체크해주면 된다.
k가 왼쪽 배열보다 작다면 왼쪽 배열 내에서 k 번째 수를 찾으면 된다.
n + n/2 + n/4 + ... 으로 줄어서 시간 복잡도는 O(n). 물론 운이 아주 나쁘다면 O(n^2)겠지만 평균은 O(n) 이다.
메모리 제한은 따로 없으므로 구현이 간단하게 배열 복사 방식으로 구현하면 좋다. (in-place로 배열 원소 교체도 가능한데 코드가 꽤 지저분하다)
Source Code
All reactions