- 博客(12)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 Game of Life
因为要求in-place,所以要用状态机状态转换的方法:状态0: 死细胞转为死细胞状态1: 活细胞转为活细胞状态2: 活细胞转为死细胞状态3: 死细胞转为活细胞最后我们对所有状态对2取余,那么状态0和2就变成死细胞,状态1和3就是活细胞,达成目的。我们先对原数组进行逐个扫描,对于每一个位置,扫描其周围八个位置,如果遇到状态1或2,就计数器累加1,扫完8个邻居,如果少于两个活
2016-07-31 14:45:21 201
转载 Longest Increasing Subsequence
来源:点击打开链接一个各公司都喜欢拿来做面试笔试题的经典动态规划问题,互联网上也有很多文章对该问题进行讨论,但是我觉得对该问题的最关键的地方,这些讨论似乎都解释的不很清楚,让人心中不快,所以自己想彻底的搞一搞这个问题,希望能够将这个问题的细节之处都能够说清楚。对于动态规划问题,往往存在递推解决方法,这个问题也不例外。要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要
2016-07-29 09:57:02 165
原创 Super Ugly Number
梳理一下思路:首先看一下找第n个丑数的方法:根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的。这种思路的关键在于怎样确保数组里面的丑数是排好序的。我们假设数组中已经有若干个丑数,排好序后存在数组中。我们把现有的最大丑数记做M。现在我们来生成下一个丑数,该丑数肯定是前面
2016-07-27 20:17:32 218
原创 Search a 2D Matrix II
从右上角开始, 比较target 和 matrix[i][j]的值. 如果小于target, 则该行不可能有此数, 所以i++; 如果大于target, 则该列不可能有此数, 所以j-- 注意循环的跳出条件是&&的关系class Solution {public: bool searchMatrix(vector>& matrix, int target) {
2016-07-26 11:32:28 159
原创 Wiggle Subsequence
注意两个点:1.正负数的判断用乘法,小于0就说明两个数异号2.两个数相等,wiggle Subsequence的长度减13.读题没读清楚,[1,17,5,10,13,15,10,5,16,8]-->[1,17,10,13,10,16,8],其中5,15,5可以删掉,之前一直以为必须是连续的才行,所以我把这个数组分成了三个wiggle Subsequence,然后挑了一个最大的cla
2016-07-25 17:23:17 238
原创 Different Ways to Add Parentheses
class Solution {public: vector diffWaysToCompute(string input) { vector result; int size = input.size(); for (int i = 0; i < size; i++) { char cur = input[i]; if (cur == '+' || cur == '-
2016-07-15 19:09:10 192
原创 Unique Paths
一开始用递归,中间计算结果超过int,返回0导致0被除以。顺便复习了一下函数表达式的写法。class Solution {public: int uniquePaths(int m, int n) { std::function fac = [&fac](int a) ->int { return a <= 0 ? 1 : fac(a - 1)*a; }; return fac(n
2016-07-13 10:04:49 164
原创 Combination Sum III
思路是穷举->二分(一个数在或者不在解集中)->二叉树->深度优先搜索。深度优先搜索的迭代函数不太好构造,需要理清逻辑。class Solution {public: vector > combinationSum3(int k, int n) { vector > res; vector out; combinationSum3DFS(k, n, 1, out, res)
2016-07-09 18:53:43 178
原创 Unique Binary Search Trees
设C0 = 1,只有一个元素时可行的BST数量C1 = 1,有两个元素时可行的BST数量C2 = 2 ,C3 = C0*C2 + C1*C1 + C2*C0 , C4 =......这就是卡特兰数的定义。所以用动态规划来做。然而这种规律太难找了,我更倾向于寻找有启发性的思路。因为对于每一个节点,只有两种状态:作为根节点或不作为根节点,有二分的思想,然而很明显这道题不能用二分法做,同
2016-07-08 09:51:08 216
原创 Convert Sorted Array to Binary Search Tree
编码时有很多逻辑小细节,分享一份代码:class Solution { public: TreeNode* generateBST(int left, int right, vector& num) { if (left > right) return nullptr; else if (left
2016-07-07 11:41:44 199
原创 Generate Parentheses
结果是一个二叉树,所以用递归求。重点是递归的进入和终止条件。class Solution {public: vector vec; vector generateParenthesis(int n) { recursive("", 0, 0, n); return vec; } void recursive(string result, int l, int r, int
2016-07-05 10:41:36 180
转载 Single Number II
解法一: int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上 1 出现的次数,最后 在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。代码如下:[cpp] view plain copy print?class Solution { public:
2016-07-03 09:51:15 434
Inside SQLite(SQLite技术内幕) 原版+个人翻译版
2016-10-14
MFC用capCaptureGetSetup设置视频捕获遇到问题
2014-12-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人