刷清橙OJ--A1082.查找第K小元素
2017-06-20 08:00
253 查看
问题:
A1082. 查找第K小元素
时间限制:1.0s 内存限制:512.0MB
总提交次数:5526
AC次数:1191 平均分:32.26
问题描述
给定一个大小为n的数组s和一个整数K,请找出数组中的第K小元素。
这是一个补充程序的试题,你需要完成一个函数:
int findKth(int *s, int n, int K)
表示在s指向的数组中找到第K小的元素(如果K=1,表示找最小元素),你需要返回该元素的值。
此题对时间的要求比较高,请注意下面的算法描述。
算法描述
你可以直接将s中的元素进行排序后输出第K小的元素,但使用这种方法你大概只能得到30%的分数。
要在一个数组中查找第K小的元素,可以模仿快速排序的做法,即对于数组s[0..n-1],首先用数组中的任意一个元素(可以取第一个)将数组分为三个部分:s[0..p-1], s[p], s[p+1..n-1],其中s[0..p-1]中的值都不大于s[p],s[p+1..n-1]中的值不小于s[p]。
此时,如果p=K-1,则s[p]是要查找的元素,返回s[p]。
如果p>=K,则第K小的元素一定在s[0..p-1]中,可以在s[0..p-1]中查找第K小的元素。
如果p<K-1,则第K小的元素一定在s[p+1..n-1]中,而且是s[p+1..n-1]中的第K-p-1小的元素,你可在这一段中查找第K-p-1大的元素即可。注意由于数组可以看作是静态指针,所以s[p+1..n-1]可以看作是以s+p+1指向的数组,你可以在C++中使用s+p+1来表示这个数组。
这是一道完善程序的试题,你只需要在下面程序标注的"@你的代码"的位置补充适当的语句或语句段使程序能正确运行即可,在提交的时候,你要提交的内容只包括补充的内容,不包括其他的代码。
int findKth(int *s, int n, int K)
{
@你的代码
}
代码:
个人想法:代码来自试题讨论。
A1082. 查找第K小元素
时间限制:1.0s 内存限制:512.0MB
总提交次数:5526
AC次数:1191 平均分:32.26
问题描述
给定一个大小为n的数组s和一个整数K,请找出数组中的第K小元素。
这是一个补充程序的试题,你需要完成一个函数:
int findKth(int *s, int n, int K)
表示在s指向的数组中找到第K小的元素(如果K=1,表示找最小元素),你需要返回该元素的值。
此题对时间的要求比较高,请注意下面的算法描述。
算法描述
你可以直接将s中的元素进行排序后输出第K小的元素,但使用这种方法你大概只能得到30%的分数。
要在一个数组中查找第K小的元素,可以模仿快速排序的做法,即对于数组s[0..n-1],首先用数组中的任意一个元素(可以取第一个)将数组分为三个部分:s[0..p-1], s[p], s[p+1..n-1],其中s[0..p-1]中的值都不大于s[p],s[p+1..n-1]中的值不小于s[p]。
此时,如果p=K-1,则s[p]是要查找的元素,返回s[p]。
如果p>=K,则第K小的元素一定在s[0..p-1]中,可以在s[0..p-1]中查找第K小的元素。
如果p<K-1,则第K小的元素一定在s[p+1..n-1]中,而且是s[p+1..n-1]中的第K-p-1小的元素,你可在这一段中查找第K-p-1大的元素即可。注意由于数组可以看作是静态指针,所以s[p+1..n-1]可以看作是以s+p+1指向的数组,你可以在C++中使用s+p+1来表示这个数组。
这是一道完善程序的试题,你只需要在下面程序标注的"@你的代码"的位置补充适当的语句或语句段使程序能正确运行即可,在提交的时候,你要提交的内容只包括补充的内容,不包括其他的代码。
int findKth(int *s, int n, int K)
{
@你的代码
}
代码:
int a[1000000]={0},j=0,i; for(i=0;i<n;i++) ++a[s[i]]; for(i=0;i<1000000;i++) { if(a[i]!=0) j+=a[i]; if(j==K||(j>K&&(j-a[i])<K)) return i; }
个人想法:代码来自试题讨论。
相关文章推荐
- 清橙OJ 1082 查找第K小元素 -- 快速排序
- 清橙OJ 1082 查找第K小元素 -- 快速排序
- 数组中查找第k小元素的复杂度为O(n)的算法
- 分治算法四(查找第K小元素)
- 查找第k小的元素(O(n)递归解法)
- 查找两个已经排好序的数组的第k大的元素
- POJ 2828 Buy Tickets (线段树 单点更新-查找第k大元素)
- python查找第k小元素代码分享
- 在两个有序链表中查找第K大元素。
- 查找数组中第K大元素
- 查找两个已经排好序的数组的第k大的元素
- 有序矩阵中查找第k小的元素 Kth smallest element in a row-wise and column-wise sorted 2D array
- 查找给定区间内第K大的元素
- 如何在N个无序数组元素中,查找第K大元素
- 查找第K大元素
- 查找--第K大的元素
- 快速排序和查找第K大元素
- 用快排来查找第k小元素
- 算法之查找第k小的数和查找最小的k个元素
- 查找--第K大的元素