- 博客(48)
- 资源 (18)
- 收藏
- 关注
原创 Binary Tree Zigzag Level Order Traversal
思路: 层次化遍历二叉树,但要控制每次进入每层节点的顺序,通过栈和层数来控制。 时间复杂度O(N),空间复杂度O(N)。
2015-05-31 16:36:53
356
原创 Simulation Happy Number
思路: 模拟法。拆分成位数,判断平方和是否为1 以及 该数是否曾经出现过,为1返回true,曾经出现过返回false。
2015-05-24 11:01:11
363
原创 Binary_Search Sqrt(x)
思路: 二分法,时间复杂度O(logN),空间复杂度O(1)。 从left = 1, right = x/2出发二分查找res。
2015-05-21 16:36:42
499
转载 Linux find命令用法小结
本文转载自:《Linux find命令用法小结》find是个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征【名字类型属主权限等】的文件。find命令的格式: find [-path ..] -options [-print -exec -ok]path:要查找的目录路径。~ 表示$HOME目录. 表示当前目录/ 表示根目录
2015-05-20 16:04:21
496
原创 LeetCode Count and Say Simulation
思路: 根据第一个推出第二个,第二个推出第三个,以此类推。 时间复杂度为O(N*M),N为轮数,M为每一轮字符串长度。 空间复杂度为O(M)。
2015-05-20 14:14:32
454
原创 DFS Palindrome Partitioning
思路:DFS。相当于需要把一个串分割成若干子串,每一个子串都必须是回文。那么从start开始分,如果[s[start],s[i]]是回文,再从start+i开始分,递归下去。class Solution {private: bool isPalindrome(const string s, int start, int end) { while(start
2015-05-19 21:24:34
428
原创 DFS Surrounded Regionss
思路:连通问题。直接从四周找‘O’,然后dfs找到所有的连通区域进行标记。被标记的最后都是可以访问的到的,标记为‘X’;其余的'O'都是访问不到的,还是‘O’。class Solution {private: int row; int col; void expand(int x, int y, vector>& board) {
2015-05-19 18:36:35
332
原创 DFS Binary Tree Maximum Path Sum
思路:DFS。时间复杂度O(N),空间复杂度O(logN)。这道题不好想,题目要求从任一节点开始到任一节点结束的sum和最大。全局保存一个max_sum,到一个节点就看是否能更新它。到一个节点,比较4种搭配:如果单独该节点;//左右子树都为负;如果其左子树+该节点;//右子树为负;如果其右子树+该节点;//左子树为负;如果其左右子树+该节点;//左右子树都为非负;
2015-05-18 15:25:44
590
原创 DFS Sum Root to Leaf Numbers
思路:DFS。时间复杂度O(N),空间复杂度O(logN)。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(
2015-05-18 14:54:10
385
原创 BFS Word Ladder II
思路:记录每个节点的父节点,BFS完成后通过DFS找到所有的路径。第一次MLE。class Solution {private: unordered_map> father; vector> res; void dfs(vector &path, string &start, string &end) { path.push_
2015-05-17 21:28:45
506
原创 BFS Word Ladder
思路:BFS。注意wordDict的不断缩小,否则TLE。每到一层,将所有可以转换的word加入到path中,count用来记录每一层是否遍历完,如果遍历完,用下一层转换的word的个数来更新count,且更新level,准备进入下一层搜索。如果搜索到endWord,直接返回,路径长度一定是最小的。class Solution {public: int lad
2015-05-17 15:46:37
624
原创 遍历 Valid Palindrome
思路:时间复杂度O(N),空间复杂度O(N)。class Solution {public: bool isPalindrome(string s) { if(s.empty()) return true; vector v; for(int i = 0; i < s.size(); ++i) { if(is
2015-05-17 13:49:00
348
原创 遍历 Best Time to Buy and Sell Stock III
思路:题目要求最多有两次交易。假设有一次选择获得的收益最高:那么一定可以找到一天i(0 所以这里设2个状态数组f,g:一个是正向记录[0,i]的最大收益,一个反向记录[i,n-1]的最大收益,最后找到max(f[i]+g[i])即可。class Solution {public: int maxProfit(vector& prices) { co
2015-05-16 16:12:04
379
原创 Greedy Best Time to Buy and Sell Stock II
思路:贪心,两两比较,只要递增,就可以加进收入中。需要简单证明一下贪心的正确性:为什么两两比较就可以?如果隔很多天差值很大呢?假设给定:a, b, c,分别代表第1天,第2天,第3天股票价格,c - a = 100;if b if b > c,会将b-a计入,相等于两两比较,成立。class Solution {public: int maxProfit(ve
2015-05-15 21:35:26
311
原创 遍历 Best Time to Buy and Sell Stock
思路:时间复杂度O(N),空间复杂度O(1)。总是希望差值最大,cur_min记录当前的最小值。class Solution {public: int maxProfit(vector& prices) { if(prices.size() == 0) return 0; size_t size = prices.size();
2015-05-15 20:50:17
266
原创 DP Triangle
思路:时间复杂度O(N*N),空间复杂度O(1)。刚开始理解错了,每往下走一行,只能往下面或者往下面的前面走,不能往下面的后面走。Example:row0:2row1:3 4row2:6 5 7row3:1 2 8 35只能选2 或者 8,而不能选1。class Solution {public: int minimumTotal(vector > &
2015-05-15 20:21:11
439
原创 遍历 Populating Next Right Pointers in Each Node II
思路:跟上一题思路一样:只要上一层next指针串起来了该层所有对象,那么下一层就可以串起来。/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int
2015-05-15 15:03:10
392
原创 DFS Construct Binary Tree from Inorder and Postorder Traversal
思路:DFS,与上一题思考方式一样,这次的root出现在Post-Order的末尾。Example:In-Order: 1 2 3 4 5 6Post-Order: 1 3 2 6 5 4先从Post-Order末尾找到root,这里是4,然后在In-Order中找到root的位置,左半部分就是root的左子树的元素,右半部分就是root右子树的所有元素,这里1,2,3
2015-05-14 16:47:43
389
原创 DFS Construct Binary Tree from Preorder and Inorder Traversal
思路:DFS。Example:Pre-Order:4 2 1 3 5 6In-Order:1 2 3 4 5 6先从Pre-Order中找到的第一个肯定是root,这里是4,然后从In-Order中以4为界,左边是root的左子树的元素,右边是root的右子树的元素,这里1,2,3是root的左子树的元素,5,6是root的右子树的元素,依次类推,再构造root
2015-05-14 16:13:57
333
原创 BFS Binary Tree Level Order Traversal II
思路:BFS。上一题的基础上反转一下结果数组即可。std:reverse()Reverse rangeReverses the order of the elements in the range [first,last).#include template void reverse (BidirectionalIterator first, Bi
2015-05-14 14:42:39
443
原创 BFS Binary Tree Level Order Traversal
思路:BFS。两个队列,一个保存当前层的所有节点,一个保存下一层的所有节点。std::swap()函数:C++98: , C++11: 在C++ 98中的定义:// defined in before C++11template void swap (T& a, T& b);在C++ 11中的定义:non-arra
2015-05-14 14:31:01
402
原创 DFS Validate Binary Search Tree
思路:DFS。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *
2015-05-14 11:26:47
369
原创 DFS Unique Binary Search Trees II
思路:DFS依次以k为root,其中1=当k为root时:[1,k-1]构成其左子树相应的root; [k+1,n]构成其右子树相应的root;递归的构建。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * T
2015-05-14 11:09:06
304
原创 DFS Restore IP Addresses
思路:注意的地方:去掉前缀0的ip,但允许单个0;要剪枝,判断下面剩下的数字的个数能否构成全是3位的ip 或 全是1位的ip,否则MLE;class Solution {private: void dfs(string s, string ip, vector &res, int step, size_t cur) { if(cur == s.size()
2015-05-11 21:21:09
540
简易记事本
2012-04-14
庖丁解牛中文分词工具
2014-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人