一个问题
  • 板块学术版
  • 楼主donnieguo
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/15 12:56
  • 上次更新2023/10/24 04:09:28
查看原帖
一个问题
824800
donnieguo楼主2023/1/15 12:56

p1923

代码:

#include <iostream>
using namespace std;

int a[5000010];
int ans, k;
int n;

void findkth(int a[], int l, int r) {
	if (l == r) {
		ans = a[l];
		return;
	}
	int i = l, j = r, flag = a[(l + r) / 2];
	do {
		while (a[i] < flag)
			i++;
		while (a[j] > flag)
			j--;
		if (i <= j) {
			swap(a[i], a[j]);
			i++;
			j--;
		}
	} while (i <= j);
	if (k <= j)
		findkth(a, l, j);
	else if (i <= k)
		findkth(a, i, r);
	else
		findkth(a, j + 1, i - 1);
}

int main() {
	int n;
	cin >> n >> k;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	findkth(a, 0, n - 1);
	cout << ans;
	return 0;
}

是《深入浅出》上的代码,但是最后一个点会TLE。

是我的main函数有问题导致过不去,还是书上代码有问题?还请各位dalao指教!

2023/1/15 12:56
加载中...