找出1到N中缺少的數?

摘要: 《算法導論》中的練習題,n-1個元素的數組A,含有1到n之間的n-1個數,找出缺少的那個數?要求:O(n)解法一:sum = n*(n+1)/2;sum減掉A中的每個元素,剩下的就是要找的數。解法二:利用異或運算,x^x==0xor = 1^2^...^n;xor異或A中的每個元素,最後得到的就是所求。解法三:增加一個空位A[n-1],將A[i]移到A[ A[i] ],题目升级: 缺失两个数,求出这两个数。思想: 也是采用异或。 假设,缺失的数为s1和s2。则s1^s2=1^2^3.....^n^a[0]^a[1]^....a[n-3]。这个式子一目了然,无需多解释。问题是如何通过这个式子求. 阅读全文
posted @ 2013-02-25 22:31 mhgu 阅读(1364) 评论(0) 推荐(0) 编辑

找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?

摘要: 《算法導論》裏的一個練習題:找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?要求: O(nlg#include void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)); void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)); #define EPSION 1e-5i 阅读全文
posted @ 2013-02-25 21:34 mhgu 阅读(310) 评论(0) 推荐(0) 编辑

插入排序 (insertion_sort)與 合並排序 (merge-sort)

摘要: //插入排序int insertion_sort(int a[], int n){ int i, j; for (i=1; i<n; i++) { int key = a[i]; // 將a[i]插入到排好序的a[0, i-1]中 for (j=i-1; j>=0 && a[j] > key; j--) a[j+1] = a[j]; a[j+1] = key; } return 0;}分治法 (divide-and-conquer) 合並排序 (merge-sort)//合並排序 (merg... 阅读全文
posted @ 2013-02-25 21:28 mhgu 阅读(208) 评论(0) 推荐(0) 编辑

null pointer call in c++

摘要: #include <iostream>class Foo { public: static void bar() { std::cout << "NULL->bar()" << std::endl; }}; int main(void) { Foo * foo = NULL; foo->bar(); //<=> Foo::bar(); return 0; } 空指針可以引用類的static函數,等價于classname::static_fun();。 阅读全文
posted @ 2013-02-24 21:09 mhgu 阅读(141) 评论(0) 推荐(0) 编辑