給定乙個陣列包含n個元素,統計前m大的數並且把這m個數從大到小輸
出如果先排序再找前m大的,時間複雜度為o(nlogn)
用分治處理:複雜度 o(n+mlogm)
思路:把前m大的都弄到陣列最右邊,然後對這最右邊m個元素排序,
再輸出
關鍵 :o(n)時間內實現把前m大的都弄到陣列最右邊
/*
如何將前k大的都弄到最右邊
1)設key=a[0], 將key挪到適當位置,使得比key小的元素都在
key左邊,比key大的元素都在key右邊(線性時間完成)
2) 選擇陣列的前部或後部再進行 arrangeright操作
*/#include
#include
using
namespace
std;
//設k為a[0],將比k大的挪到k右邊,返回k的位置下標
int quickarray(int a,int first,int end)
if(iwhile(iif(ireturn i;
}//對前m大的數快速排序,也可以用系統自帶的 qsort() ,o(nlogn)
void quicksort(int a,int first,int end)
}//分治法:將k兩邊的數分配好,時間複雜度o(n)
前m大的數
total submission s 13762 accepted submission s 4693 problem description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表...
前m大的數
a 前m大的數 sort time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,...
前m大的數
hpu2017 sort 結構體練習 virtual judge 還記得gardon給小希布置的那個作業麼?上次比賽的1005 其實小希已經找回了原來的那張數表,現在她想確認一下她的答案是否正確,但是整個的答案是很龐大的表,小希只想讓你把答案中最大的m個數告訴她就可以了。給定乙個包含n n 3000...