数据结构
qq_36393555
这个作者很懒,什么都没留下…
展开
-
CCF201312-3 最大的矩形
之前想了很久都没有明白,看了一些博客,自己动手一步一步排之后终于知道怎么回事了。有了2种方法,其中第二种方法用了栈,但是怎么试都是20分,不知道怎么回事。 解法一:各矩形高度存在height[n]数组中,从i=0开始遍历,可能的矩形长lenght=j-i+1,宽width=min(height[i]...height[j-1]),然后最大面积maxsquare=lenght*width,每次i+原创 2017-03-21 21:36:19 · 391 阅读 · 0 评论 -
用两个栈实现队列
剑指offer上的题目,因为我刚刚看过栈和队列,所以想练几个题目,再加强对栈和队列的认识。 其实还算简单。就是第一个栈用来push,第二个栈用来delete。代码如下: #include #include using namespace std; class solution { public: void push(int x) { si1.push(x); } int pop原创 2017-03-22 11:29:58 · 168 阅读 · 0 评论 -
用两个队列实现一个栈
思路和两个栈实现队列一样。代码如下: #include #include using namespace std; class solution { public: void push(int x) { q1.push(x); } int pop() { if (q2.empty()) { while (!q1.empty()) { q2.push原创 2017-03-22 20:33:34 · 200 阅读 · 0 评论 -
从尾到头打印链表
既然反向输出链表,那就利用栈这个LIFO特性。堆栈中存节点的指针,而非节点的数据域的值。参考了剑指offer的代码,但是还是有点不明白为什么增加节点那里需要的函数参数是指向节点的指针的指针,有待以后继续思考。 代码如下: #include #include #include using namespace std; struct ListNode { int m_nKey; ListN原创 2017-03-22 22:08:39 · 209 阅读 · 0 评论 -
线性时间的最大子数组
之前写过使用分治法来处理最大子数组问题,时间复杂度为O(logN),这次写一下用线性时间来解决最大子数组问题。只输出最大子数组的值,不输出到底哪几个元素组成最大子数组。 C++代码如下: #include using namespace std; int Maxsubsequence(const int a[], int n) { int Thissum=0, Maxsum = 0;原创 2017-03-16 19:29:38 · 422 阅读 · 0 评论 -
二分查找
很好用也很基本的一个算法,之前没写过,补一下。代码如下: #include using namespace std; int binarysearch(const int a[], int low,int high,int x) { if (low == high) return a[low]; else { for (size_t i = low; i < high; ++i)原创 2017-03-16 19:45:13 · 205 阅读 · 0 评论 -
欧几里得算法求最大公因数
#include using namespace std; unsigned int Gcd(unsigned int x, unsigned int y) { unsigned int temp; while (y > 0) { temp = x%y; x = y; y = temp; } return x; } int main() { unsigned int原创 2017-03-16 20:16:44 · 424 阅读 · 0 评论