自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 252

原创 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 200

翻译 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 238

原创 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 205

原创 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 350

原创 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 154

翻译 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 137

原创 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 223

翻译 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 135

原创 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 166

原创 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 170

原创 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 203

原创 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 142

原创 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 138

原创 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 174

原创 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 220

原创 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 131

原创 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 124

原创 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 143

原创 17. Letter Combinations of a Phone Number

穷举法:class Solution { vector<string> ret;public: vector<string> letterCombinations(string digits) { vector<string> dict = {" ","*","abc","def","ghi",&quot

2019-03-10 23:33:00 137

原创 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 138

原创 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 108

原创 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 143

原创 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 118

原创 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 167

原创 71. Simplify Path

思路是把除了 非"." 和 ".." 的目录保存下来,如果遇到 "..",向前去掉一个目录。注意:结尾可能没有 ‘/’string simplifyPath(string path) { string ret = ""; vector<string> v; string s=""; f...

2019-03-10 11:38:00 115

原创 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 122

原创 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 112

原创 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 164

原创 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 172

原创 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 275

原创 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 &gt; 1为元素大于...

2019-03-06 16:00:38 129

原创 523. Continuous Subarray Sum

这一题乍一看很简单,确实有很多坑:(1) k为integer,如果求 mode的话,k==0是不可以使用的;(2)并且至少两个数相加才可以,判断只能在第二个for循环里面。(3) nums可能为空;(4) nums的size为1的时候,肯定不包括两个数目相加等于k。bool checkSubarraySum(vector&lt;int&gt;&amp; nums, in...

2019-03-06 14:36:23 119

原创 5. Longest Palindromic Substring

(1)定义256个数组,因为char最大为256,记录每个字符的位置;(2) start是字串的其实位置,知道遇到重复的字串,才会更新start的值为重复字串的当前位置;(3)每个字符与start的距离为非重复字串的长度。比较找出最长。int lengthOfLongestSubstring(string s) { vector&lt;char&gt; v(256...

2019-03-06 12:03:27 124

原创 39. Combination Sum

(1) 首先需要sort;(2)每个val是否可以重新利用; (3) 数组里是否又重复的数值;(4) 根据题意控制start的值。class Solution { void combinate(vector&lt;int&gt;&amp; candidates,vector&lt;int&gt;&amp; item, int start, int...

2019-03-05 23:51:55 114

原创 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 118

原创 529. Minesweeper

关键:八个方向的点要弄清楚。 使用dfs。class Solution { vector&lt;pair&lt;int,int&gt;&gt; link = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; int getMineNum(vector&lt;vector&lt...

2019-03-05 16:36:56 164

原创 694. Number of Distinct Islands

关键是:把island转换成唯一标识的字串。class Solution { void dfs(vector&lt;vector&lt;int&gt;&gt;&amp; grid,int i,int j,int m, int n, char flag, string&amp; str){ if(i&lt;0 || i&gt;=m || j&lt;0 || j&gt...

2019-03-04 23:51:33 123

转载 885. Spiral Matrix III

关键:(1) step的把握。 1,1,2,2,3,3,4,4. (2) 还有通过 (dx,dy) 控制方向。vector&lt;vector&lt;int&gt;&gt; res; int dx = 0, dy = 1; int step = 1; int count = 1; res.push_...

2019-03-04 14:13:15 148

原创 59. Spiral Matrix II

关键点:定位准确下一个起始点。vector&lt;vector&lt;int&gt;&gt; generateMatrix(int n) { vector&lt;vector&lt;int&gt;&gt; ret; if(n == 0) { return ret; } ...

2019-03-04 11:25:33 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除