随笔分类 -  算法

上一页 1 2 3 下一页
剑指offer 25 二叉树中和为某一值的路径
摘要:非递归方法: 要注意转向右子树时的情况!! 对容器vector,push_back()是从容器末尾插入元素,pop_back()是从容器末尾删除元素。stack没有迭代器,只能插入和得到栈顶元素。 递归方法如下: 阅读全文
posted @ 2016-05-24 16:45 summerkiki 阅读(128) 评论(0) 推荐(0)
Binary Tree Level Order Traversal
摘要:level.clear():删除vector level中的所有元素,返回void。 阅读全文
posted @ 2016-05-23 14:52 summerkiki 阅读(126) 评论(0) 推荐(0)
剑指offer 22 栈的压入、弹出序列
摘要:*不可以在堆栈为空时,使用s.top()函数,会发生未知! *要注意边界条件!! 阅读全文
posted @ 2016-05-23 09:53 summerkiki 阅读(130) 评论(0) 推荐(0)
Min Stack
摘要:这里面有一个注意的点是,如果现在要push x,且x等于当前存在的最小值(栈中已经有了x)时,也要把x进栈。否则当x出栈时,当前最小值也跟着出栈,但是原栈中最小值元素依然还有,此时最小值却发生了错误。 class MinStack { public: /** initialize your data 阅读全文
posted @ 2016-05-22 22:55 summerkiki 阅读(118) 评论(0) 推荐(0)
Spiral Matrix
摘要:这道题的思路有几个关键: 1. 首先将矩阵看成由若干个顺时针方向的圈组成 2. 每打印一圈,列和行分别减2,由此得出打印循环的边界条件 3. 将每一次打印分为四步: 从左向右、从上到下、从右向左、做下往上,一次考虑每种情况的边界条件 阅读全文
posted @ 2016-05-22 11:27 summerkiki 阅读(160) 评论(0) 推荐(0)
Invert Binary Tree
摘要:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ cl... 阅读全文
posted @ 2016-05-21 17:13 summerkiki 阅读(193) 评论(0) 推荐(0)
Merge Two Sorted Lists
摘要:这样写很啰嗦,可以考虑申请一个头结点,然后对l1、l2的操作就可以合并在一起。 递归方法如下: 阅读全文
posted @ 2016-05-20 09:54 summerkiki 阅读(146) 评论(0) 推荐(0)
Remove Nth Node From End of List
摘要:这道题要删除倒数第n个结点,因此要先找到倒数第n+1个结点,然后进行删除。由于可能删除的是链表的第一个结点,因此需要在链表开始插入一个空的头结点。 写题之前要提前想好几种特殊情况: 1. head指针为空,或者链表只有一个结点时,均返回NULL 2. 要删除的结点是头结点或者尾结点 阅读全文
posted @ 2016-05-18 09:41 summerkiki 阅读(139) 评论(0) 推荐(0)
调整数组顺序使奇数位于偶数前面
摘要:题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 class Solution { public: void reOrderArray(vector<int> &ar 阅读全文
posted @ 2016-05-17 22:28 summerkiki 阅读(138) 评论(0) 推荐(0)
Pow(x, n)
摘要:这道题的直观思路不难,但是要注意很多细节问题。 首先,x要考虑整数、小数和0的情况。0不能取负数次方,0的0次方没有数学意义,可以取0也可以取1。 由于这里要处理x为小数的情况,因此x的类型为double,要判断一个double类型的x是否等于0,不能直接用(x==0.0),因为在计算机内表示小数时 阅读全文
posted @ 2016-05-16 11:13 summerkiki 阅读(256) 评论(0) 推荐(0)
Excel Sheet Column Number
摘要:这道题可以看作是26进制问题。26进制就是最多可以用26个不同的符号组合在一起来表示一个数值。 因此,ABC代表的数值就是:A*262+B*261+C*260=1*262+2*261+3*260,其他字母组合以此类推。 下面这种方法是一种很直观的思路,但是要调用C++库函数pow(x,a),计算时间 阅读全文
posted @ 2016-05-15 17:33 summerkiki 阅读(182) 评论(0) 推荐(0)
Number of 1 bits
摘要:把数字n与1作与运算,判断n的最低位是不是1,接着把1左移一位得到2,再和n做与运算,就能判断n的次低位是不是1... 这样反复左移,每次都能判断n的其中一位是不是1。这种解法循环的次数等于n二进制的位数。 *把n减1,就是把n二进制表达中的最后一个1变为0,如果它右边还有0的话,则所有的0都变为1 阅读全文
posted @ 2016-05-14 16:41 summerkiki 阅读(95) 评论(0) 推荐(0)
Majority Element
摘要:这道题直观的思路是对数组直接排序,排序后中间位置的元素就是要求的元素,时间复杂度是O(nlogn)。 但是还有更快的解法,基于快速排序中partition函数的O(n)算法。快速排序的partition函数有两种解法,一种是“两个下标分别从首尾向中间扫描”,另一种是“两个指针索引一前一后逐步向后扫描 阅读全文
posted @ 2016-05-11 09:22 summerkiki 阅读(165) 评论(0) 推荐(0)
数组-Find Minimum in Rotated Sorted Array
摘要:排序数组在旋转后,可以分为前后两个排序子序列。在没有相同元素的情况下,前一个数组中的元素均大于后一个数组中的元素。 如果我们要找最小元素,则只要找到两个数组的分界点即可,即第二个子序列的开始元素。 由于子序列分别有序,所以我们可以采用二分查找的思想来解决问题,不断缩小查询范围。 这道题要注意特例情况 阅读全文
posted @ 2016-05-10 10:13 summerkiki 阅读(123) 评论(0) 推荐(0)
Implement Stack using Queues
摘要:class Stack { public: // Push element x onto stack. void push(int x) { if(q1.empty()&&q2.empty()) q1.push(x); else if(!q1.empty()) q1.push(x); ... 阅读全文
posted @ 2016-05-09 10:00 summerkiki 阅读(160) 评论(0) 推荐(0)
Implement Queue using Stacks
摘要:class Queue { public: // Push element x to the back of queue. void push(int x) { s1.push(x); } // Removes the element from in front of queue. void pop(void) { if... 阅读全文
posted @ 2016-05-09 09:01 summerkiki 阅读(146) 评论(0) 推荐(0)
Construct Binary Tree from Preorder and Inorder Traversal
摘要:题目:从一棵树的前序和中序遍历结果构建一棵树。 前序遍历结果的第一个结点是树的根节点;在中序遍历结果中,根节点的左边是树的左子树,右边是树的右子树。然后再重新确定左子树和右子树的范围,递归寻找左子树和右子树的根节点。 这里需要注意的是递归终止条件:pre_start>pre_end. 阅读全文
posted @ 2016-05-08 18:21 summerkiki 阅读(164) 评论(0) 推荐(0)
剑指offer 从尾到头打印链表
摘要:<剑指offer第五题> 思路:在不改变链表结构的情况下,要从头到尾扫描链表,然后再从尾到头输出,这是一种“先进后出”的思路。最直观的想法就是利用栈来完成。 从栈又可以想到递归,因为递归本质上就是一个栈结构。每访问到一个结点时,先输出它后面的结点,再输出结点本身,这样链表的输出结果就反过来了。 但递 阅读全文
posted @ 2016-05-08 10:46 summerkiki 阅读(125) 评论(0) 推荐(0)
剑指offer 替换字符串中的空格
摘要:把代码整理简化一下: 阅读全文
posted @ 2016-05-07 14:32 summerkiki 阅读(201) 评论(0) 推荐(0)
Search a 2D Matrix
摘要:每一行为升序排序,且下一行的第一个数字大于上一行的最后一个数字,则可以把二维数组转化为一维数组来处理。该一维数组为升序排序,在一个升序排序的数组中查找一个数,最方便的方法就是二分查找。 在这里要知道,如何把一维数组的坐标转化为二维数组的坐标。 设一个二维数组是m*n,则它一共有m*n个元素: 则二维 阅读全文
posted @ 2016-05-06 16:45 summerkiki 阅读(165) 评论(0) 推荐(0)

上一页 1 2 3 下一页