摘要:
这个题和leetcode的基本一样。用了更好点的思路。在A中折半猜是不是中位数,A中没有后在B中猜。最后猜到B[j]int median(vector &A) { int n = A.size(); if (n % 2 == 1) { return A[n/2]; } else { return (A[n/2-1] + A[n/2]) / 2; }}int median(vector &A, vector &B, int l, int r) { if (l > r) return median(B, A, 0, B.size()-1);... 阅读全文
posted @ 2014-01-22 23:28
阿牧遥
阅读(259)
评论(0)
推荐(0)
摘要:
http://www.itint5.com/oj/#49这一题一开始想到是用HashSet+链表来做,链表记录prev和next。这样也可以,后来看到都是连续的整数,而且交流了一下觉得可以用类似并查集的方式来做,一个数组,每个位置记录该位置的直接后继,删除元素时更改后继。vector vec;void init(int N) { vec.resize(N); for (int i = 0; i = vec.size()) return; vec[x] = query(x+1);}int query(int x) { if (x >= vec.size()) return... 阅读全文
posted @ 2014-01-22 18:46
阿牧遥
阅读(280)
评论(0)
推荐(0)
摘要:
http://www.itint5.com/oj/#47一种做法是:把矩形所占的方格都设为-1,就是个最大子矩阵和问题。复杂度o(w^2*h)或o(w*h^2),空间W*H猜想应用场景是:电脑屏幕上已经有了n个聊天框,新建一个聊天框,放在屏幕的哪个位置最好。客户端计算的话,空间复杂度太高的算法应该是没法实际应用的。这种方法OJ也会空间超出。另一种做法(贪心思想,和一个矩形覆盖最小):所求矩形的上边要么贴着边界,要么贴着某个已有矩形的下边所求矩形的下边要么贴着边界,要么贴着某个已有矩形的上边所求矩形的左边要么贴着边界,要么贴着某个已有矩形的右边所求矩形的右边要么贴着边界,要么贴着某个已有矩形的左 阅读全文
posted @ 2014-01-22 15:08
阿牧遥
阅读(293)
评论(0)
推荐(0)
摘要:
http://www.itint5.com/oj/#39最大子矩阵和,复杂度O(n^3)。利用了最大子段和的方法。int maxRectSum(vector > &matrix) { int n = matrix.size(); if (n == 0) return 0; int m = matrix[0].size(); if (m == 0) return 0; int max = 0; for (int i = 0; i vec(n); for (int j = i; j max) max = sum; } ... 阅读全文
posted @ 2014-01-22 11:57
阿牧遥
阅读(229)
评论(0)
推荐(0)

浙公网安备 33010602011771号