|
2014年1月14日
摘要:
catalan number不过不懂怎么推导TAT用递推来实现吧class Solution {public: int numTrees(int n) { vector f(n+1 , 0); f[0] = 1; f[1] = 1; for(int i = 2 ; i <= n ; ++i) { for(int k = 1 ; k <= i ; ++k) { f[i] += f[k-1] * f[i-k]; } } return ... 阅读全文
2014年1月13日
摘要:
和上一个差不多,但是有重复.有重复元素就挺麻烦的.比如1 1 1我每个1都是可以选或者不选那么第一个和第三个选了,第二个不选和第一个第二个选了第三个不选是一样的效果...可以按上一题的做法做,然后再去重...那我们怎么搞呢?想想我们的递归树再每一层不选重复元素,到下一层才选,那就去重了,不是么?因为这样选是唯一的啊ex.0 1 21 1 1我选了0位置的1,那在root的时候就不能选1 ,2 位置的那继续,选了1位置的1,再递归可以选2位置的也可以不选,如果不选就是11那我在1位置的时候不选1位置的1的话,也不能选2位置的,所以11是唯一的.class Solution {public: .. 阅读全文
摘要:
枚举每个元素,取还是不取class Solution {public: void dfs(vector >& ans , vector& s , vector& tmp , int n , int dep) { ans.push_back(tmp); for(int i = dep ; i > subsets(vector &S) { vector >ans; if(S.size() tmp; sort(S.begin() , S.end()); dfs(ans , S , tmp , S.siz... 阅读全文
摘要:
看着非常简单,leetcode上面通过率极低...可以用正则表达式,不过面试肯定不是让你写个就ok了。。所以我们自己来构造DFA吧。。。写个表TAT在各种数据的调试下,更改状态才过了(详情见照片上的修改enum Op{ Operator, //0 Digit, // 1 E, // 2 Dot, //3 Space,// 4 Invalid};int table[][5] = { {1,2,-1,8,-1}, {-1,2,-1,8,-1}, {-1,2,4,3,-1}, {-1,7,4,-1,-1}, {5,6,-1,-1,-1... 阅读全文
摘要:
思想很简单,细节有点小麻烦的题.直接next_permutation我觉得应该可以的,不过好慢,可能TLE吧然后就是用数学方法了..一位一位的确认除去第一位,后面有(n-1)!种排列.那么第一位就是k / (n-1)! (这结果只是下标啦,k从0开始,所以我们要预先k--这个是下标,从还存在的从小到达的数组里面的下标,表示选哪个然后 k %= (n-1)! base/=n-1如此迭代下去class Solution {public: int fac(int n) { int res = 1; for(int i = 2 ; i 0 ; k%=base , b... 阅读全文
摘要:
一看,直接递归...果然超时了TAT不过我觉得能把递归写对就不错啦,应该满足面试要求了吧.不过TLE我也不知道我写对没有.正确的做法是贪心.大概是这样的我们来匹配s和p如果匹配就s++ , p++如果不匹配的话就看p之前知否有*当然是否有*我们需要记录的,遇到*就记录当前*的位置和匹配到的s的位置然后从*的下一位置匹配,开始匹配0个字符如果ok往后走,往后不ok,那么匹配1个字符...同理2,3,4个字符(有点回溯的感觉吧所以实践复杂度是O(len(s) * len(p))class Solution {public: bool isMatch(const char *s, const ... 阅读全文
2014年1月12日
摘要:
递归遍历/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int travel(TreeNode* root , int num) { if(root -> left == nullptr && root -> right ... 阅读全文
摘要:
naive的解法,O(n^2),应该谁都能想到枚举中间,再枚举左右边界。O(n) ,网上有个单调stack的解法,不过没看懂。。。空了再研究下我们还是从naive的解法入手吧那个做了好多好多的无用运算比如我算了i=2的leftmost的时候,算i=3的时候也会重复计算那么,我们把运算记录下来嘛。le... 阅读全文
摘要:
最多n个相同的连续,那么就每隔n个检查下是否相等就0k了。。。class Solution {public: int removeDuplicates(int A[], int n) { if(n <= 2) return n; int cnt = 2; for(int i = 2 ; i < n ; i ++) { if(A[i] != A[cnt-2]) { A[cnt++] = A[i]; } } return cnt; }}; 阅读全文
摘要:
最简单的就是用O(n)的额外空间不过也没必要,就用两个指针就好啦。。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *partition(ListNode *head, int x) { if(head == nullptr) return head; ... 阅读全文
|