0%

LeetCode面试题40.最小的K个数

LeetCode面试题40.最小的k个数

三种实现方法:

快速排序:

1
2
3
4
5
6
7
8
9
10
11
12
void quick_sort(int l, int r, vector<int>& arr)
{
if(l >= r) return;
int i = l - 1, j = r + 1, mid = arr[l + r >> 1];
while(i < j)
{
do i++; while(arr[i] < mid);
do j--; while(arr[j] > mid);
if(i < j) swap(arr[i], arr[j]);
}
quick_sort(l, j, arr), quick_sort(j + 1, r, arr);
}

归并排序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void merge_sort(int l, int r, vector<int>& arr, vector<int>& temp)
{
if(l >= r) return;
int mid = l + r >> 1, i = l, j = mid + 1, k = 0;
merge_sort(i, mid, arr, temp), merge_sort(j, r, arr, temp);
while(i <= mid && j <= r)
{
if(arr[i] <= arr[j]) temp[k++] = arr[i++];
else temp[k++] = arr[j++];
}
while(i <= mid) temp[k++] = arr[i++];
while(j <= r) temp[k++] = arr[j++];
for(int i = l, k = 0; i <= r; i++, k++)
arr[i] = temp[k];
}

然鹅。。。以上两种方法都太菜了😳
最终解决方法:
1
sort(arr.begin(), arr.end());

Over!😂