摘要:
这题真是浪费了很多时间,想法也对了,转移到寻找第k小的元素上来,然后根据两个都是一排好序的数组,像类似算法导论中利用partition找到划分的q,但在这里,由于题目要求O(logn),所以这个找q的过程必须是常数时间,想了好久想不到一个常数时间的划分。最后在网上找到答案了:分析:我们现在设计一个求... 阅读全文
摘要:
PS1:如果单纯为做出这道题那么这个代价是O(nlgn),通过排序就可以了。 这里讨论的是O(n)的算法。那么来分析一下这个算法是如何做到O(n)的,算了不分析了,这个推到看起来太麻烦了。其实我想知道的只是结论而已,想感叹的也是partition真是特别好用啊!!!!代码: 1 #include 2... 阅读全文
摘要:
寻找第二小的元素:如果用堆排序的方法,我们建立一个堆后只需要O(n),比较根节点的左儿子和右儿子的大小就可以得到第二小的节点了。而且BuildHeap的代价只有O(n)。 1 #include 2 3 using namespace std; 4 5 #define Left(i) i*2... 阅读全文
摘要:
实现一个O(lgn)的最大堆优先队列的delete操作。Heap-Delete(A,i)操作能够将节点i从对中A删除。代码说明:假如删除序号为i的节点,那么我们先把最后的节点,放到i中去,然后对i进行堆维护,即向下维护堆,然后此时得到的序号为i的值向下能满足堆的性质,但向上不一定可以,所以我们再向上... 阅读全文
摘要:
1 class Solution { 2 public: 3 double pow(double x, int n) { 4 if(x == 1) 5 { 6 return 1; 7 } 8 if(x ... 阅读全文
摘要:
1 class Solution { 2 public: 3 string addBinary(string a, string b) { 4 int aL = a.length(); 5 int bL = b.length(); 6 int cL; 7 ... 阅读全文
摘要:
带参宏定义和inline修饰的内联函数都是在编译时,用函数体替换掉宏调用或函数调用。这样用的好处是减少调用函数所花费的时间。例如:算法导论在讲到堆排序时说的,好的堆排序实现一般是把Left(i),Right(i),Parent(i)的实现通过宏定义或内联函数来实现,这就是因为当我们对一组数据使用堆排... 阅读全文
摘要:
GET BUSY LIVIN‘ OR GET BUSY DYIN 阅读全文