| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:O(n)的算法怎么也要32MSIn Reply To:O(n)的算法怎么也要32MS Posted by:love_mely at 2012-12-28 09:16:48 > #include<iostream>
> #include<algorithm>
> #include<time.h>
> using namespace std;
> int n;
> int* milk;
> void swap(int i,int j)
> {
> int temp=milk[i];
> milk[i]=milk[j];
> milk[j]=temp;
> }
> int findKth(int start,int end,int k)
> {
> if(start>= end)
> return milk[start];
> srand((unsigned)time(NULL));
> int index=(rand() % (end-start)) + start;
> int key=milk[index];
> swap(start,index);
>
> int i=start;
> int j=end;
> while(i!=j)
> {
> while(j!=i)
> {
> if(milk[j]>=key)
> j--;
> else
> {
> swap(i,j);
> break;
> }
> }
> while(i!=j)
> {
> if(milk[i]<=key)
> i++;
> else
> {
> swap(i,j);
> break;
> }
> }
> }
> if(i+1==k)
> return milk[i];
> else if(i+1 > k)
> return findKth(start,i-1,k);
> else
> return findKth(i+1,end,k);
> }
> int main(void)
> {
> cin>>n;
> milk=new int[n];
> for(int i=0;i<n;i++)
> cin>>milk[i];
> int k=n/2+1;
> int result=findKth(0,n-1,k);
> cout<<result<<endl;
> system("pause");
> return 0;
> }
抱歉,你的算法的思想是什么呢?我没有看懂。。。不过能到O(n)的时间真的很了不起!
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator