알고리즘 풀이
.leetcode(75. Sort Colors)
silvergoni
2021. 1. 30. 22:46
반응형
문제
https://leetcode.com/problems/sort-colors/
문제 풀기 전
- quick sort로 풀라는 걸로 들렸다.
- Lumoto방법만 알고 있었는데 hoare방법으론 안풀었는데 중복이기에 hoare방법으로 풀어야햇다.
직접 푼 풀이
재도전하기
느낀점
- 결론적으로 못 풀었다. hoare's방법을 봤을때 이해했다고 생각했는데 직접 짜보지 않아서인지 이해한게 아니었다.
- 근본적으로 lumoto와 접근방법이 다르다. lumoto는 요소하나를 중심으로 낮은거 높은거를 나누고 hoare는 그 중간요소를 찾는것부터 시작한다. 그 중간요소를 왼쪽 오른쪽으로부터 접근을 시작해서 찾고 그 다음에 그걸 중심으로 subarray를 재귀적으로 계산한다.
- "347. Top K Frequent Elements"에서 hoare's를 익혔다고 생각했는데 아니었다. 다시 풀어보자.
솔루션 공부 후 추가로 푼 풀이
class Solution {
public void sortColors(int[] nums) {
doSort(nums, 0, nums.length-1);
}
private void doSort(int[] nums, int start, int end) {
if (start >= end) {
return;
}
int pivot = partition(nums, start, end);
doSort(nums, start, pivot);
doSort(nums, pivot+1, end);
}
private int partition(int[] nums, int start, int end) {
int pivot = nums[(start+end)/2];
int left = start-1;
int right = end+1;
int aaa = 0;
while(true) {
do {
left++;
} while (nums[left] < pivot);
do {
right--;
} while (nums[right] > pivot);
if (left >= right) {
return right;
}
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
}