🔸每周例行的套路清理🔸

-------------------------------------------- 

🔸《第周contest做出来了题》

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

🔸《第周contest做出来了题

-------------------------------------------- 

-------------------------------------------- 

🔸《第周101contest做出来了题

 

258. Add Digits 入学考试:数位相加:练习多写while循环吧while (num > 0)

890. Find and Replace Pattern找出匹配形式的单词s[w.charAt(i)-'a']=p[pattern.charAt(i)-'a']=i+1;一次匹配一对,没匹配上不行

863. All Nodes Distance K in Binary Tree 到指定节点距离为k的节点:先在左边右边用dfs生成长度,存map。再用dfs的length+1找出所有节点

536. Construct Binary Tree from String 从括号字符串中构建二叉树:从i j中截取字符串, j应该跟随i更新

663. Equal Tree Partition 能否把树均分为求和相等的两半getTotal(root.left) + getTotal(root.right) + root.val通过自定义的函数名来进行traverse

742. Closest Leaf in a Binary Tree查找最近的叶子节点:用map存路径map.put(root.left, root);然后用dfs找到k

 

-------------------------------------------- 

🔸《第98周contest做出来了题

 

  1. 450. Delete Node in a BST 删除bst中的一个节点:删除节点就是把节点值替换一下就行了,剩下的用dc补上来

  2. 528. Random Pick with Weight index的随机发生器:把index和数字对应起来:在weightsum数组里搜索随机生成的weightsum,然后返回位置。

  3. 582. Kill Process杀死所有子代:一对多后用map做dfs,来找出所有子代。

  4. 348. Design Tic-Tac-Toe设计井字游戏:数学关系:每一行都不能有2种元素。所以必须要rows[row] ==row才行

  5. 213. House Robber II 首尾相同的偷窃问题分情况讨论。从0-n-1, 1-n

  6. 113. Path Sum II 输出每个具体路径:为了避免全局变量,所以不如curSum每次缩小,最后变成root.val。

  7. 556. Next Greater Element III下一个更大的数字:找到递增元素,把前面的一个最小元素往后换,然后后半截排序

  8. 735. Asteroid Collision彗星相撞后的消失数组:对linkedlist可以用polllast getlast的方法

  9. 333. Largest BST Subtree节点数最多的bst子树:检查valid时都还要traverse,就会形成n2的复杂度。所以定义新的类不对时直接*-1转过来就行。

  10. 648. Replace Words 替换成为原来的单词:set取前半截用substring,而且右边界的i不包,要包就要加<=i的等号

373. Find K Pairs with Smallest Sums 找出求和和最小的k组数:第一列的值都可能是最小的,所以先加第一列, 然后用q做bfs

    1. 651. 4 Keys Keyboard复制粘贴获得的最大长度:贪心算法可以从除法 and 乘法的角度来思考

    2. 776. Split BST 按大小拆分二叉树:返回2个二叉树:用TreeNode[]数组,分为0 1两个变量即可

    3. 738. Monotone Increasing Digits 单调递增的最接近数字:大不了前面位上的数-1,后面都是9

    4. 249. Group Shifted Strings把迁移后相同的字符串集合起来:多设置一个变量,来记录总共的相对偏移量就行了

    5. 650. 2 Keys Keyboard复制粘贴的次数:用除法,totalSteps += singleSteps; 需要一直相加来积累一次性能走的最长步数

    6. 452. Minimum Number of Arrows to Burst Balloons扎气球的个数最少:为了一把箭能涉及到全部,end选取的是min,需要因地制宜

    7. 365. Water and Jug Problem量杯灌水问题:倒水问题其实就是倍数问题,可以从gcd角度想想

    8. 106. Construct Binary Tree from Inorder and Postorder Traversal根据后中序数组恢复出原来的树:从postorder中取出index作为后续使用

-------------------------------------------- 

🔸《第97周contest做出来了题

 

  1. 31. Next Permutation 返回下一个pumutation序列:把递减的尾巴整个reverse一遍,变成递增

  2. 652. Find Duplicate Subtrees找出重复的子树:形成serial字符串,添加cur节点即可

  3. 694. Number of Distinct Islands 形状不同的岛屿数量:存一块岛屿的形状:其实就是存方向构成的string就行了

  4. 93. Restore IP Addresses产生所有可能的ip地址:用到dfs的思想:i从1到3中的一个进去

  5. 298. Binary Tree Longest Consecutive Sequence最长连续序列:dc 写一个表达式,然后我用Max,让它自己搜出来

  6. 134. Gas Station加油站:tank就一直+=就行了,就可以不必清空 

  7. 322. Coin Change选取最少的硬币凑整:运行了之后才有正常值,所以需要用arrays.fill初始化为奇葩值

  8. 251. Flatten 2D Vector 平铺二维矩阵:调用.iterator()可以产生一种遍历的数据结构

  9. 545. Boundary of Binary Tree二叉树的边界:主函数中设置t f,强制性设置好条件往左右扩展

  10. 796. Rotate String旋转字符串:简单拼一下就行了

  11. 567. 判断某字符串中是否存在另一个字符串的Permutation:为了减掉s1的字符,这里是先减后加。

  12. 560. Subarray Sum Equals K 求和为k的子数组个数:连续求和为k,可以用连续的sum减去k

  13. 688. Knight Probability in Chessboard棋子留在棋盘上的概率:每走一步,棋盘都要变化,所以要用2个dp数组:初始和现在

  14. 129. Sum Root to Leaf Numbers pathsum路径求和:sum由于经常要操作 而且需要返回,所以放在里面不用拿出来

  15. 247. Strobogrammatic Number II输出所有对称数字helper(curCount - 2, targetCount)取上一截,然后逐渐往外扩展

  16. 360. Sort Transformed Array二元一次方程返回大数序列:和指针对撞有啥关系:谁的平方比较大(绝对值大)数组就先加谁

  17. 498. Diagonal Traverse对角线z型traverse:换方向用d = -d来控制

  18. 491. Increasing Subsequences增长型序列:backtracing的函数里必须把数组完全地for一遍,否则不算完全的深度搜索

  19. 281. Zigzag Iterator z字型遍历:直接用temp交换就行了

  20. 259. 3Sum Smaller小于版3sum:改变第三个变量的值:for一遍就行了

  21.  

     

  22.  
     

     

     

     

     

     

 

 

-------------------------------------------- 

🔸《第周96contest做出来了题

  1. 5. Longest Palindromic Substring 返回最长的回文子串extendPalindrome(s, i, i)扩展奇数长度,extendPalindrome(s, i, i + 1); 扩展偶数长度,字符串不是直接得来的,是从中切出来的

  2. 706. Design HashMap 实现哈希表:Bucket是一个链表,根据上一个节点来找下一个

  3. 89. Gray Code返回位运算的所有生成值:就是背:i < 2n时,i ^ i/2 异或是作差

  4. 73. Set Matrix Zeroes 把矩阵同一行列的元素都改成0:标记大法好,最后一起改

  5. 199. Binary Tree Right Side View 从右侧看的节点数:bfs先右后左,第一个在右

  6. 451. Sort Characters By Frequencypq中存Map.Entry 代表一个哈希表实体

  7. 516. Longest Palindromic Subsequence最长的不连续回文串的长度:dp回文串就是:加2或者取两者中较大值

  8. 186. Reverse Words in a String II 翻转有空格的单词串 里面不变:全转+空格前单词转+最后一个补转

  9. 445. Add Two Numbers II 链表中的数字求和:通过sum / 10的方法可以把十位取出来,不用清空,每次除10一直加就行了。倒序相加用stack

  10. 287. Find the Duplicate Number 找出数组中的重复数字:出现两次的value当作指针,数组形成环。所以用快慢指针

  11. 654. Maximum Binary Tree 最大节点劈开,然后左边、右边排序:recursion的条件是start end

  12. 24. Swap Nodes in Pairs 链表每2个点翻转一次:用一个cur做主节点 负责移动,一个first second分别做后面两个从节点

  13. 54. Spiral Matrix以螺旋顺序输出数组:新开四个新变量就行了

  14. 419. Battleships in a Board 棋盘上的战舰数量:题目对所在的位置有特殊要求,就只能老老实实一个个地数了

  15. 153. Find Minimum in Rotated Sorted Array找其中的最小值:总有case过不了,可以稍微调试一下,起码把自己手写的case跑通了

  16. 151. Reverse Words in a String翻转一句话中的单词:不管输入是字符串还是字符数组,最后一个单词都先不贴,因为后面没有空格

  17. 220. Contains Duplicate III 数组指针差k数值差t:水桶排序要求不能重复。做法:/容量即可。

  18. 337. House Robber III二叉树上的抢劫题:数组里面的元素只有2个,指定一下就行了。

  19. 547. Friend Circles 求间接朋友形成的朋友圈数量:然后初始化岛屿数量为n,再调用find来减少

  20. 227. Basic Calculator II 无括号版本计算器:乘除法直接算,加减法先在stack里存着

  21. 442. Find All Duplicates in an Array找出数组中所有重复了两次的元素:转一回:自己重复变成index重复,再转回到nums[index]重复

  22. 347. Top K Frequent Elements 最常用的k个元素:想不到木桶排序:统计出现次数相同的情况,所以可以用

  23. 36. Valid Sudoku 判断九九有效的数独:三倍行数遍历+一倍列数遍历进入具体的3*3

  24. 105. Construct Binary Tree from Preorder and Inorder Traversal根据前中序数组恢复出原来的树:参数就是数组的index就行了,分成start1 end1  start2 end2,多开几个变量

  25. 289. Game of Life数组生存游戏:用cur next两个二进制位和board[][]总数 来共同表示邻居的数量

  26. 386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列:cur * 10 + i 进位时>n就退出

  27. 763. Partition Labels 相同字母出现在同一块中,且块数最多:存map[26],然后i顺着循环一遍

  28. 396. Rotate Function 移动加权求和,取最大值:先初始化一个sum, iteration再说

  29. 529. Minesweeper扫雷游戏:统计雷的数量:单独新开一个函数

  30. 646. Maximum Length of Pair Chain 最长的链条长度:首先要确定是坐标型n-1

  31. 762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量:往右移一位要配合&1,才能取出最后一位

  32. 508. Most Frequent Subtree Sum 最频繁的子树和:后序。maxCount:单独加个变量就行了

  33. 791. Custom Sort String字符串保持字母一样,位置可以变:粘贴差字母的时候,从26个字母a-z逐个入手即可

  34. 725. Split Linked List in Parts把链表分成长度不超过1的若干部分:k组中,每一组开个头,然后n+r位用两个节点往后贴

  35. 426. Convert Binary Search Tree to Sorted Doubly Linked List把bst变成双向链表:bst里面可以直接在处理中间节点时翻(指定值迭代、指定指针)

  36. 114. Flatten Binary Tree to Linked List 把二叉树变成链表:tree中按正常的顺序prev.right = root连总会返回原来的tree,+右中左两次取反才能形成中序链表

-------------------------------------------- 

🔸《第周95contest做出来了0题

  1. 按照点添加的并查集 求岛:由root找next_id,由next_id找real_root(三连击),然后一言不合就合并。
  2. 323按照线段添加的并查集 求岛:每次更新的都是roots数组,把新的root指定给roots数组中的元素
  3. graph valid tree图是否是树:添加每一条边 root1 == root0代表有环,不行。count > 1代表分块,不行
  4. Decode String 解码icc字符串3[i2[c]]:nested用字母数组2个stack,左括号就之前的不加了,右括号就开始append求和

  5. 384. Shuffle an Array数组洗牌:random出j,nums[i] [j]交换即可

  6. 149. Max Points on a Line同一条线上的最多点数:分子分母同时约分掉gcd之后,用双重hashmap存储(x,(y,次数))

  7. 65. Valid Number 判断字符串是不是数字:e之前必须有数,之后nseen重置为0

  8. 152. Maximum Product Subarray最大乘积子数组/是否连续A[i]保证二者之间相对较大,只能保证负号之前的局部最优解

  9. 150. Evaluate Reverse Polish Notation逆波兰表达式:用stack,注意一下:先pop出来的是晚进去的。a-b a/b都当作b。

  10. 187. Repeated DNA Sequences重复的DNA子串序列:set的判断语句 没加就自己自动加 没必要再写一遍

  11. 244. Shortest Word Distance II 实现数组中的最短距离单词:找到之后index1 - index2,然后i/j中较小的只走一个

  12. 698. Partition to K Equal Sum Subsets 数组分成和相同的k组:dfs找到k组之后,继续找k - 1 组,变量变化之后就要控制它的最后值 是否为0或1 

  13. 156. Binary Tree Upside Down反转二叉树:六步里面:temp节点存起来,传递给cur.left

  14. 364. Nested List Weight Sum II 大小反向的括号加权求和:每一层剥皮的时候,把剩下的都加进去,用array的.addAll(ni.getList())方法

  15. 515. Find Largest Value in Each Tree Row查找一行中的最大值:其中q每次只存了一行,所以size就是当前数组的大小

  16. 716. Max Stack实现一个最大stack:stack maxstack必须要保持相同的长度,功能就是维持最大值而已

  17. 366. Find Leaves of Binary Tree输出层数相同的叶子节点res.get(level).add(node.val)可以实现精确添加,指定哪一层添加哪个数

  18. 254. Factor Combinations 返回所有因数组合:退出条件是n<= 1就肯定要用return退出,是否添加取决于item的size是否大于而不是等于1

  19. 245. Shortest Word Distance III 单词可以重复的最短单词距离:p1 p2相等的时候,暂存一下之前的p1 = p2; p2 = i;

  20. 8. String to Integer (atoi) 字符串转成整数:先设置一个bound变量,-2147483648/10。当前num > bound || num == bond & digit > 7都不行

  21. 22. Generate Parentheses产生所有匹配括号的方案:定义open和close整数,分open < max 和close < open两个阶段来回溯

-------------------------------------------- 

 

  1.  

 

 

posted @ 2018-07-29 15:57  苗妙苗  阅读(323)  评论(0)    收藏  举报