算法
james1990
这个作者很懒,什么都没留下…
展开
-
实现rotate的几种算法
Rotate 123abcdefg to abcdefg123. there are three ways to do this(1)循环换位算法(2)三次反转算法(3)排列循环置换算法:王晓东老师在著作中介绍了一条循环置换分解定理:对于给定数组A[0..N-1]向后循环换位N-K位运算,可分解为恰好gcd(K,N-K)个循环置换,且0,...,gcd(K原创 2013-12-01 11:33:11 · 1035 阅读 · 0 评论 -
在数组中删除尽可能少的数,使得数组满足“先由小到大,再由大到小”
void MyDelete(int* a, int n){ int* asc = new int[n]; // asc[i]表示以a[i]结尾的最长升序 int* desc = new int[n]; // desc[i]表示从a[i]开始的最长降序 int* inc = new int[n]; // 亮点,用辅助数组的巧妙之处 const in原创 2013-12-04 15:51:35 · 901 阅读 · 0 评论 -
伴随数组求亲和数::伴随数组
int sum[5000000] = {0};void InitSum(){ for(int i=1; 2*i <= 5000000; ++i) { int j = i+i; while(j <= 5000000) { sum[j] += i; j += i; }原创 2013-12-04 21:40:49 · 555 阅读 · 0 评论 -
常用hash算法
http://blog.csdn.net/joker0910/article/details/6239805转载 2014-03-18 19:43:42 · 379 阅读 · 0 评论 -
归并排序
#include #include using namespace std;void myMerge(int a[], int from, int mid, int to){ assert(from <= mid && mid < to); int* arr = new int[to-from+1]; assert(arr); int i = from;原创 2014-03-25 16:46:50 · 353 阅读 · 0 评论 -
二分查找
int binarySearch(int a[], int startIndex, int endIndex, const int target){ int left = startIndex; int right = endIndex; while(left <= right) { int middle = ((right - left) >>原创 2014-03-25 16:40:45 · 345 阅读 · 0 评论