- 博客(48)
- 资源 (18)
- 收藏
- 关注
原创 Binary Tree Zigzag Level Order Traversal
思路: 层次化遍历二叉树,但要控制每次进入每层节点的顺序,通过栈和层数来控制。 时间复杂度O(N),空间复杂度O(N)。
2015-05-31 16:36:53 343
原创 Simulation Happy Number
思路: 模拟法。拆分成位数,判断平方和是否为1 以及 该数是否曾经出现过,为1返回true,曾经出现过返回false。
2015-05-24 11:01:11 349
原创 Binary_Search Sqrt(x)
思路: 二分法,时间复杂度O(logN),空间复杂度O(1)。 从left = 1, right = x/2出发二分查找res。
2015-05-21 16:36:42 465
转载 Linux find命令用法小结
本文转载自:《Linux find命令用法小结》 find是个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征【名字类型属主权限等】的文件。 find命令的格式: find [-path ..] -options [-print -exec -ok] path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录
2015-05-20 16:04:21 468
原创 LeetCode Count and Say Simulation
思路: 根据第一个推出第二个,第二个推出第三个,以此类推。 时间复杂度为O(N*M),N为轮数,M为每一轮字符串长度。 空间复杂度为O(M)。
2015-05-20 14:14:32 436
原创 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 405
原创 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 323
原创 DFS Binary Tree Maximum Path Sum
思路: DFS。时间复杂度O(N),空间复杂度O(logN)。 这道题不好想,题目要求从任一节点开始到任一节点结束的sum和最大。 全局保存一个max_sum,到一个节点就看是否能更新它。 到一个节点,比较4种搭配: 如果单独该节点;//左右子树都为负; 如果其左子树+该节点;//右子树为负; 如果其右子树+该节点;//左子树为负; 如果其左右子树+该节点;//左右子树都为非负;
2015-05-18 15:25:44 574
原创 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 379
原创 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 471
原创 BFS Word Ladder
思路: BFS。 注意wordDict的不断缩小,否则TLE。 每到一层,将所有可以转换的word加入到path中,count用来记录每一层是否遍历完,如果遍历完,用下一层转换的word的个数来更新count,且更新level,准备进入下一层搜索。 如果搜索到endWord,直接返回,路径长度一定是最小的。 class Solution { public: int lad
2015-05-17 15:46:37 599
原创 遍历 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 329
原创 遍历 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 360
原创 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 298
原创 遍历 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 248
原创 DP Triangle
思路: 时间复杂度O(N*N),空间复杂度O(1)。 刚开始理解错了,每往下走一行,只能往下面或者往下面的前面走,不能往下面的后面走。 Example: row0:2 row1:3 4 row2:6 5 7 row3:1 2 8 3 5只能选2 或者 8,而不能选1。 class Solution { public: int minimumTotal(vector > &
2015-05-15 20:21:11 422
原创 遍历 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 378
原创 DFS Construct Binary Tree from Inorder and Postorder Traversal
思路: DFS,与上一题思考方式一样,这次的root出现在Post-Order的末尾。 Example: In-Order: 1 2 3 4 5 6 Post-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 379
原创 DFS Construct Binary Tree from Preorder and Inorder Traversal
思路: DFS。 Example: Pre-Order:4 2 1 3 5 6 In-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 316
原创 BFS Binary Tree Level Order Traversal II
思路: BFS。 上一题的基础上反转一下结果数组即可。 std:reverse() Reverse range Reverses the order of the elements in the range [first,last). #include template void reverse (BidirectionalIterator first, Bi
2015-05-14 14:42:39 404
原创 BFS Binary Tree Level Order Traversal
思路: BFS。 两个队列,一个保存当前层的所有节点,一个保存下一层的所有节点。 std::swap()函数: C++98: , C++11: 在C++ 98中的定义: // defined in before C++11 template void swap (T& a, T& b); 在C++ 11中的定义: non-arra
2015-05-14 14:31:01 385
原创 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 343
原创 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 292
原创 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 527
庖丁解牛中文分词工具
2014-03-25
简易记事本
2012-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人