编程之美
文章平均质量分 70
qyxqyxqyx
每天一个算法每天一个模式
展开
-
编程之美2.5查找最大的k个数method2
//从n个数中查找最大的k个数 #include #include using namespace std; void input(int& i){ i=rand()%100; } void print(int i){ cout<<i<<" "; } int f(vector& v,int p){//v中比p大的数的个数 int a原创 2011-10-23 17:05:49 · 655 阅读 · 0 评论 -
编程之美2.5查找最大的k个数的实现<method1>
//从n个数中查找最大的k个数,method1 //时间复杂度O(N*log(K)) #include #include using namespace std; void f(int k,vector& v,vector& sa,vector& sb){//v输入数组,sa比x大的数的数组,sb比x小的数组。 while(1){ int x=v[(i原创 2011-10-23 16:58:45 · 792 阅读 · 0 评论 -
编程之美2.4查找最大的k个数method3
//最小堆算法。堆中容纳k个元素。 //堆顶元素最小。新来元素和堆顶比较。若小,舍弃。若大,替换堆顶,重新做堆。 //时间复杂度:O(N*log(k))每次更新堆log(k),更新n次 #include #include using namespace std; #define MIN -1111 class minHeap{ int n; int* a;原创 2011-10-23 17:07:23 · 677 阅读 · 0 评论 -
编程之美2.4查找最大的k个数method4
//每个数对应一个值个数的计数,从大到小,若数目统计达到k,则把比这个数大的数都输出 //时间复杂度O(3*n)=o(n) #include #include using namespace std; #define Max 100 #define Min 0 void input(int& i){i=rand()%100;} void output(int& i){cout<<原创 2011-10-23 17:20:48 · 650 阅读 · 0 评论 -
编程之美2.8查找符合条件的数
//N*M,N给定值,求最小M使得N*M的值中只有0或1#include #include #include using namespace std; int head_0(unsigned long b){//b的32位二进制表示前面有多少个0 int count=0; unsigned long tp=0x80000000; while(!(b&tp原创 2011-10-23 18:09:02 · 654 阅读 · 0 评论 -
编程之美2.9fibonacci数列method3
#include #include using namespace std; typedef pair Point; template class Matrix{ private: T* start; int row;//行数 int col;//列数 public: Matrix(){ start=NULL;row=0;col=0; } Mat原创 2011-10-26 09:52:59 · 798 阅读 · 0 评论