- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 好书清单
1、Think in JavaAuthor: scott meyer:2、efficient c++3、more efficient c++4、effective mordern c++
2019-05-15 16:28:46
234
原创 567. Permutation in String
(1)不care order。class Solution {public: bool checkInclusion(string s1, string s2) { if (s1.size() > s2.size()) return false; int n1=s1.size(), n2=s2.size(); vector&...
2019-03-16 19:27:11
185
翻译 424. Longest Repeating Character Replacement
(1)滑动窗口。 most +k最大,如果比这个值大,需要left++;(2)关键是维护一个most的最大值。class Solution {public: int characterReplacement(string s, int k) { if(s.size()<=k) return s.size(); ...
2019-03-16 19:25:31
205
原创 611. Valid Triangle Number
(1)三角形两个小边的和大于第三边;(2)数组sort之后,最大边设置成最大,次大边选择最大-1,最小边可以选择的种类。int triangleNumber(vector<int>& nums) { if (nums.size() == 0 || nums.size() < 3) { return 0; ...
2019-03-16 18:19:24
188
原创 223. Rectangle Area
(1)模拟相交;(2)不要遗漏重叠的情况。int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int areaOfA = (C - A) * (D - B); int areaOfB = (G - E) * (H - F); ...
2019-03-16 17:59:19
331
原创 161. One Edit Distance
(1) s == t, return false;(2) diff > 1 return false;(3)其中一个为"",另一个字符,为true;(4)其余的要做判断。class Solution { bool isEqual(string s,int i,string t,int j,int m,int n){ while(i<m &a...
2019-03-16 12:42:33
138
翻译 560. Subarray Sum Equals K
int subarraySum(vector<int>& nums, int k) { auto sum = 0; auto cnt = 0; unordered_map<int, int> m; m[0] = 1; for (auto i = 0; i < nums.si...
2019-03-15 22:37:50
125
原创 623. Add One Row to Tree
//关键注意 d == 1的情况。class Solution {public: TreeNode* addOneRow(TreeNode* root, int v, int d) { if(root == NULL) return new TreeNode(v); if(d == 1) { ...
2019-03-15 15:50:58
200
翻译 525. Contiguous Array
思想巧妙:(1) 把0变成-1;(2) sum值相同的位置,说明 -1和1的个数相同。(3) len的计算就是 i-m[sum]int findMaxLength(vector<int>& nums) { if(nums.size() == 0 || nums.size() == 1) return 0; ...
2019-03-14 16:03:16
119
原创 156. Binary Tree Upside Down
返回的root的 left 和right 要设定为null。class Solution {private: TreeNode* ret; TreeNode* head;public: TreeNode* upsideDownBinaryTree(TreeNode* root) { if(root == NULL) return NULL; ...
2019-03-13 17:58:04
151
原创 63. Unique Paths II
思路:动态规划方法。 路径数目 ret[i][j] = ret[i-1][j] + ret[i][j-1](1) 注意边界和障碍的判断,如果是障碍点,为0;(2) 注意返回值会溢出。int uniquePathsWithObstacles(vector<vector<int>>& grid) { int m = grid.size()...
2019-03-13 14:26:57
157
原创 651. 4 Keys Keyboard
主要总结规律:动态规划法。(1) N < = 6, 最大数目为 N;(2) N >6的时候分别计算 ret(j-k)*(k-1)的最大值, ret[j] > ret[j-1]。 参看红色部分的逻辑。int maxA(int N) { if(N <= 0) return 0; ...
2019-03-12 18:10:12
186
原创 509. Fibonacci Number
注意: 边界条件的判断。动态规划法比递归效率高。int fib(int N) { if(N==0 || N==1) return N; vector<int> ret(N+1,0); ret[0] = 0; ret[1] = 1; for(int i...
2019-03-12 16:08:31
129
原创 438. Find All Anagrams in a String
滑块思想:(1) 先用字串p初始化 m(长度为256,值为0) , 因为char最多是256个;(2) 注意滑动规则,p.size()范围内,如果right在 p里, m[ s[right]] 必定 >=1; 此时我们匹配的字符数目 cnt--, 并且把 m里去掉一个字符 s[right],然后再向右边滑动。(3) 当 cnt = 0时,完全匹配上。(4) 如果...
2019-03-12 15:35:34
122
原创 277. Find the Celebrity
(1)别人不认识的或者认识别人的是非名人。(2)别人都认识他,他不认识别人。int findCelebrity(int n) { if(n==0 || n==1) return 0; vector<bool> v(n,true); for(int i=0;...
2019-03-11 18:44:47
155
原创 468. Validate IP Address
1、 IPv4的规则: (1)字串总长7~15 bytes; (2)有三个 ‘.’, (3) 每个点隔开的数字长度为 0~3。每个位数 ‘0’~‘9’,并且三个bit组合范围为 0 ~ 255; (4)四个数字中,开头不可以是 ‘0’;2、IPv6的规则: (1)字串总长 15 ~ 39,由7个‘:’...
2019-03-11 17:45:44
204
原创 535. Encode and Decode TinyURL
(1) 使用 vector<string>来保存一个 long url。用该url所在index追加到后面返回 short url。(2)这种方法的对于相同url比较浪费空间。(3)不安全。class Solution { vector<string> mList;public: // Encodes a URL to a shor...
2019-03-11 16:03:32
113
原创 240. Search a 2D Matrix II
(1)从左下角开始seach。 bool searchMatrix(vector<vector<int> >& matrix, int target) { int m = matrix.size(); if(m==0) return false; int n = matrix[0].size(); ...
2019-03-11 11:14:00
111
原创 300. Longest Increasing Subsequence
(1) 动态规划法(2) 主要归结出:ret[i]=max(ret[i],ret[j]+1);int lengthOfLIS(vector<int>& nums) { if(nums.size() == 0) return 0; vector<int> ret(nums.siz...
2019-03-11 00:24:37
132
原创 17. Letter Combinations of a Phone Number
穷举法:class Solution { vector<string> ret;public: vector<string> letterCombinations(string digits) { vector<string> dict = {" ","*","abc","def","ghi","
2019-03-10 23:33:00
122
原创 49. Group Anagrams
(1) 关键使用排序后的字串最为key,比较唯一。(2) 排序后的字串相同的,放到同一个list里。vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> ret; map&...
2019-03-10 23:04:21
128
原创 208. Implement Trie (Prefix Tree)
(1) 字典树。(2) 是否word;class TrieNode{ public: TrieNode* child[26]; bool isWord; TrieNode():isWord(false) { for(int i=0;i<26;i++) child[i] = NULL; }};...
2019-03-10 22:30:22
96
原创 380. Insert Delete GetRandom O(1)
关键是random() 的函数。class RandomizedSet {private: map<int,int> m;public: /** Initialize your data structure here. */ RandomizedSet() { m.clear(); } /** Inserts a...
2019-03-10 19:57:06
129
原创 150. Evaluate Reverse Polish Notation
(1) 使用stack;(2) 两个operator数的顺序。(3) 每次只计算一次,并且把结果再压入stack,作为下一次操作数。(4) 如果没有operator,那么stack里只是保存了最后一次计算的结果,直接return。int evalRPN(vector<string>& tokens) { stack<int> s...
2019-03-10 18:44:57
108
原创 863. All Nodes Distance K in Binary Tree
(1) 关键找到target node的 所有root, 包括自身;(2) 排除target所在子树, 找到距离为 (k-i) > 0 的node list。其中i为root到target的距离。class Solution { //find path vector<TreeNode*> findTarget(TreeNode* r...
2019-03-10 13:46:14
146
原创 71. Simplify Path
思路是把除了 非"." 和 ".." 的目录保存下来,如果遇到 "..",向前去掉一个目录。注意:结尾可能没有 ‘/’string simplifyPath(string path) { string ret = ""; vector<string> v; string s=""; f...
2019-03-10 11:38:00
104
原创 64. Minimum Path Sum
(1) 使用动态编程法(2) 注意初始化第一行和第一列.int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if(m == 0) return 0; int n = grid[0].size(); ...
2019-03-09 22:29:30
108
原创 337. House Robber III
(1) 每个Node分为要用和不要用两种case。(2) 如果当前root要被使用,那么相邻的node遍布可以使用;(3) 如果当前node不被使用,那么相邻node可以用也可以不用,找到最大值相加。class Solution {public: //select----------是root使用 //non-------------root不被使用 voi...
2019-03-09 21:38:47
101
原创 394. Decode String
(1) index i一定随着变化,所以函数定义一定是一个引用 &i;(2) string s传入参数一定是一个引用 &s,这样才不会占用空间。class Solution { bool isNum(char c) { if(c >='0' && c <= '9') return true;...
2019-03-09 15:59:12
153
原创 729. My Calendar I
可以转化成 BST tree。注意边界条件。class MyCalendar {class TreeNode {public: TreeNode(int s, int e) { start = s; end = e; left = NULL; right = NULL; } int star...
2019-03-09 15:29:07
159
原创 692. Top K Frequent Words
(1)计算出每个string的频率(2)使用 map<int,vector<string>>是频率由低到高排列的;(3) emplace_back()vector<string> topKFrequent(vector<string>& words, int k) { if(words.empty()){...
2019-03-06 23:59:48
253
原创 523. Continuous Subarray Sum
(1)sum为0值的初始化;a[i]+a[i+1]+...+a[j] = nk+q;a[i]+a[i+1]+...+a[j] + ...+a[n]= mk+q;两个数字相减去 = (m-n)k.(2) m[sum]第一记录和为sum的最后一个元素的index1,再次遇到为sum的时候index2. index2-index1 > 1为元素大于...
2019-03-06 16:00:38
118
原创 523. Continuous Subarray Sum
这一题乍一看很简单,确实有很多坑:(1) k为integer,如果求 mode的话,k==0是不可以使用的;(2)并且至少两个数相加才可以,判断只能在第二个for循环里面。(3) nums可能为空;(4) nums的size为1的时候,肯定不包括两个数目相加等于k。bool checkSubarraySum(vector<int>& nums, in...
2019-03-06 14:36:23
110
原创 5. Longest Palindromic Substring
(1)定义256个数组,因为char最大为256,记录每个字符的位置;(2) start是字串的其实位置,知道遇到重复的字串,才会更新start的值为重复字串的当前位置;(3)每个字符与start的距离为非重复字串的长度。比较找出最长。int lengthOfLongestSubstring(string s) { vector<char> v(256...
2019-03-06 12:03:27
114
原创 39. Combination Sum
(1) 首先需要sort;(2)每个val是否可以重新利用; (3) 数组里是否又重复的数值;(4) 根据题意控制start的值。class Solution { void combinate(vector<int>& candidates,vector<int>& item, int start, int...
2019-03-05 23:51:55
100
原创 43. Multiply Strings
(1)返回string的长度最大为num1.size() + num2.size();(2)每次乘法后, carry + multi + str[pos] 的值;(3)整个过程模拟数字乘法;(4)最后字串头去除‘0’。string multiply(string num1, string num2) { string str(num1.size()+num...
2019-03-05 23:20:31
104
原创 529. Minesweeper
关键:八个方向的点要弄清楚。 使用dfs。class Solution { vector<pair<int,int>> link = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; int getMineNum(vector<vector<...
2019-03-05 16:36:56
148
原创 694. Number of Distinct Islands
关键是:把island转换成唯一标识的字串。class Solution { void dfs(vector<vector<int>>& grid,int i,int j,int m, int n, char flag, string& str){ if(i<0 || i>=m || j<0 || j>...
2019-03-04 23:51:33
112
转载 885. Spiral Matrix III
关键:(1) step的把握。 1,1,2,2,3,3,4,4. (2) 还有通过 (dx,dy) 控制方向。vector<vector<int>> res; int dx = 0, dy = 1; int step = 1; int count = 1; res.push_...
2019-03-04 14:13:15
135
原创 59. Spiral Matrix II
关键点:定位准确下一个起始点。vector<vector<int>> generateMatrix(int n) { vector<vector<int>> ret; if(n == 0) { return ret; } ...
2019-03-04 11:25:33
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人