Skip to content

widmonstertony/Leetcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Leetcode

this is the repo for me to practice leetcode and store the solutions with my thoughts

题目 问题 解法 考点
1. Two Sum 找一个数组里和为指定数字的两个数 把数字放进HashMap,直接找一个数是否存在于hashmap Hash Table
2. Add Two Numbers 把代表两个数的两个linkedlist加起来变成一个 写一个recursion来分别把两个linkedlist的每个node和carry一次加起来 recursion, linkedlist
3. Longest Substring Without Repeating Characters 找到字符串的最长的没有重复字符的子字符串 一边遍历字符串一边用hahstable记录下每个字符最后出现的位置,同时用一个left指针代表子字符串的最左边,一旦遇到有重复的字符串就更新left并且更新长度的答案 Sliding Window, HashTable
4. Median of Two Sorted Arrays 两个有序数组的中位数 写一个找两个数组中的第K大的数字的function,然后每次通过找哪个数组的第K/2的数更大就能确定第K大的数在哪个数组里,再把另一个数组的start idx加上K/2, 继续recursion运行这个function 分治,二分法
5. Longest Palindromic Substring 最长回文子字符串 dp[i][j]代表从i到j是否为回文串,通过dp[i + 1][j - 1]判断当前i j是否可以组成回文串 DP
6. ZigZag Conversion 把原字符串用写之字的形式转换 用变量来记录当前遍历的方向,到0往下走,到底往上走 字符串
7. Reverse Integer 把一个数字顺序反转 一直除以10获得余数,再给答案乘以10加上余数,乘以十前确认没有超过最大整数 数学,overflow处理
8. String to Integer (atoi) 字符串转换整数 (atoi) 先处理空字符,再处理符号,然后一直给base乘以10加上当前字符,乘以十前确认没有超过最大整数,最后base乘以符号 数学,overflow处理
9. Palindrome Number 判断一个整数是否是回文数 一直除以10然后一直给base乘以10加上当前数字除以十的余数,最后确认base是否和一开始的数相等 数学,overflow处理
10. Regular Expression Matching 正则表达式匹配 先处理表达式0和1长度的情况,然后处理第二个字符不是* 的情况,判断首字符是否匹配并从第二个字符开始递归这个函数来得到匹配结果,再来处理第二个字符是* 的情况,循环条件为若s不为空且首字符匹配(包括 p[0] 为点,先调用递归函数尝试匹配s和去掉前两个字符的p,如果不能匹配就要用*去匹配掉s的第一个字母,然后继续循环,最后返回递归函数匹配s和去掉前两个字符的p 有病吧,DP也可以,动态表达式很恐怖
11. Container With Most Water 盛最多水的容器 双指针从头和尾一直往中间移动,每次移动优先排除高度低的,并且更新答案 双指针
14. Longest Common Prefix 所有字符串的共同最长前缀 一边遍历一边匹配答案 送分
15. 3Sum 找一个数组里和为指定数字的三个数 先sort,再遍历整个数组,每次选中当前数字,然后对着后面的数组部分用双指针分别从头尾往中间移动,找到加起来等于sum的就保存下来,保存后记得双指针去重,移动到下一个和当前数字不一样的位置 双指针
16. 3Sum Closest 找到三个加起来最接近target的数 先sort,再遍历整个数组,每次选中当前数字,然后对着后面的数组部分用双指针分别从头尾往中间移动,找到离target最接近的sum 双指针
18. 4Sum 4个数的总和为sum的所有唯一组合 先排序数组,把start=0和k传进kSum,kSum里先检测start合法,如果k等于2就直接调用2sum里双指针分别从前和末尾来找sum,否则从start开始,每个数都调用一遍ksum,start为i+1,target变成target-nums[i],并且k-1,把返回的答案每个list都加上当前数字,并保存到答案然后返回 双指针
19. Remove Nth Node From End of List 删除链表的倒数第n个结点 两个pointer,先让第一个走n步,然后再一起走 直到第一个走到终点,把第二个后面那个删掉就好了 双指针,linkedlist
20. Valid Parentheses 验证括号是否valid 用stack保存左括号,然后每个右括号都和stack的顶部匹配,匹配不了就不valid,否则把顶部移除 Stack
21. Merge Two Sorted Lists 把两条排好序的链表按顺序合并成一条 创建一个dummy作为答案链表的头的头,然后看l1和l2哪个数字小就把哪个接到当前node后面,然后移动l1或者l2,再移动当前node到下一个,一直循环,再把剩下的接到尾部就好 LinkedList
22. Generate Parentheses 给定n组括号,返回括号的所有组合 dfs遍历,函数里两个变量记录左括号和右括号的总数,只有当左括号数量大于等于右括号时才可以继续,然后继续dfs左边加一的情况和右边加一的情况 dfs, backtracking
31. Next Permutation 返回当前数组的所有组合排列的下一个 先从后往前找到第一个不是降序的数字,也就是当前数字小于后一位,然后再从后往前找到第一个大于当前数字的数,把这两个数字交换位置,然后再把当前数字后面的所有数字前后颠倒顺序 数组,找规律
32. Longest Valid Parentheses 找到字符串里最长的valid括号长度 创建一个只放左括号的stack,和一个start来记录当前合法括号的起始位置,当遇到左括号就入栈,遇到右括号,如果stack是空说明没有足够的左括号来匹配了,start跳到下一个坐标,否则就把stack里的左括号pop出来,如果这时是空栈,说明从start到当前都完美匹配到,用当前坐标和start来更新答案,否则只能取stack里剩下的左括号坐标的右边到当前坐标这部分 stack,dp
33. Search in Rotated Sorted Array 在一个中间被旋转过的有序数组里找数 二分查找,先判断中间的数是不是比尾部的小,如果是说明后半部分是有序的,否则说明前半部分是有序的,在有序里看target是否大于开头小于尾部,也就是在有序的部分之间 binary search
34. Find First and Last Position of Element in Sorted Array 找一个有序数组中某个数的开始和结束部分 二分查找,先找到那个数,再用双指针一个往前一个往后延展找到头尾 binary search
35. Search Insert Position 找一个有序数组中某数字的位置,如果没找到则返回它该插入的位置 二分查找找upper bound上界 binary search
36. Valid Sudoku 检验一个数独是否是合法的 用boolean数组或者set记录出现过的数字,然后检测当前行,列,和3x3小方阵是否出现过该数字 Set
37. Sudoku Solver 解数独 一个一个坐标试,每个位置试1-9然后先检查那个位置是否能组成valid数独,然后helper下一个位置看是否会返回true backtracking
39. Combination Sum 找出无重复数组中所有可以使数字和为target的组合 利用回溯把所有组合都试一遍,需要一个start标注当前的数字的坐标,因为不想重新试当前数之前的数,这样会有重复 backtracking
40. Combination Sum II 找出数组中所有可以使数字和为target的组合,数组可能有重复数字 利用回溯把所有组合都试一遍,需要先排序,再用一个start标注当前的数字的坐标,因为不想重新试当前数之前的数,这样会有重复,同时在for循环时如果当前数字和之前的一样并且当前数字坐标不是start,就跳过它 backtracking
41. First Missing Positive 找到数组中第一个缺失的正数 类似448,first pass先把所有不正确的位置和正确位置的数进行交换,直到不能交换为止,然后second pass再把第一个数字和位置不匹配的数返回 数组
42. Trapping Rain Water 给定n个非负整数表示每个宽度为1的柱子的高度图,计算下雨之后能接多少雨水 单调递减的Stack,代表水坑的左边,一旦遇到大于stack最低的,说明就可能可以形成水坑,循环处理只要stack最低点比当前高度低,就拿出来作为水坑的中间的底,因为stack是单调递减的,再把stack里的peek作为水坑的左边(没有的话说明形成不了水坑),当前i则是水坑的右边界,当前水坑的高度则为左右边的更低的高度减去中间的底的高度,宽度则为边界的中间部分,计算面积保存,循环结束处理了所有比当前高度低的后再把当前坐标放进stack Stack,单调递减
44. Wildcard Matching 实现一个支持 '?' 和 '*' 的通配符匹配 可以用backtracking来暴力尝试,也可以用dp[i][j]代表s的i位前和p的j位前是否能匹配,然后如果当前匹配字符是*号,dp[i][j] = dp[i - 1][j] or dp[i][j - 1],如果是相同字符或者?,dp[i][j] = dp[i - 1][j - 1] backtracking, dp
45. Jump Game II 每个元素代表你在该位置可以跳跃的最大长度,使用最少的跳跃次数到达数组的最后一个位置 遍历数组,一直更新当前花这一步能跳到的最远距离,如果到达了这个距离,把当前花这一步能跳到的最远距离更新成当前能到的最远距离,然后继续下一步 Greedy,贪心
55. Jump Game 每个元素代表你在该位置可以跳跃的最大长度,判断你是否能够到达最后一个下标 记录下当前能跳到的最远距离dp[i],dp[i] = Math.max(dp[i - 1], nums[i] + i) dp
80. Remove Duplicates from Sorted Array II 原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度 定义res之前坐标的数一定合法,遍历数组,找到和res - 2不一样的数字放在res的位置,然后res++,最后返回res pointer
162. Find Peak Element 假设 nums[-1] = nums[n] = -∞,找到峰值元素并返回其索引 只需要找到一个上升部分的最后那个数就是peak,如果中间数小于中间数后面那个,说明我们要找的上升部分最后那个数在右边 binary search
215. Kth Largest Element in an Array 数组第k大的数 quickselect,把比piovt大的数和小的数以piovt为分界线排列好,然后看piovt的坐标看是第几大,然后移动左右坐标 Quick Select
218. The Skyline Problem 找到所有建筑重叠后的天际线 首先把一个建筑的左坐标,右坐标分别和高度pair后放进list,左坐标的高度设置为负,然后按照从小到大list排序,然后创建一个从大到小的heap并把0放进去,遍历list里的每个pair,如果当前坐标的高度为负,说明是左坐标,把正高度放进heap,反之把高度从heap删除,然后对比heap里的当前最高高度和之前的高度是否一样,不一样说明是个拐点,记录当前pair的横坐标和当前最高高度,然后更新之前的高度为当前高度 Heap
256. Paint House 粉刷房子的最小花费,要求相邻房子不同颜色,只有三种颜色 遍历dp上一个位置找出上一个房子不选当前颜色的最小花费,加上当前颜色的花费 dp
265. Paint House II 粉刷房子的最小花费,要求相邻房子不同颜色 更新当前房子的所有颜色的最小花费,需要上一个房子的最小和第二小花费的颜色,如果当前颜色是上一个房子的最小花费颜色,那么之前颜色不能选最小花费颜色,则只能取上一个房子的第二小花费的颜色,不然就只需要取上一个房子的最小花费颜色,加上当前颜色的花费就好 dp
269. Alien Dictionary 外星人字典,根据单词排序找出新的字符表顺序 把每两个字符的先后顺序记录为有向图的边和方向,对于有向图中的每个结点(字符),计算其入度,然后从入度为0的结点开始 BFS 遍历这个有向图,然后将遍历路径保存下来返回即可 Topological sorting
270. Closest Binary Search Tree Value 最接近的二叉搜索树值 先看当前root值比搜索值大还是小,再根据大小选择左右遍历下去搜索并更新答案 二分法,二叉搜索树
271. Encode and Decode Strings 字符串的编码与解码 用257 258 char来做定界符,或者把每个字符串长度也encode进去,长度转换成4位的char Mask Bit操作(& 0xff)
274. H-Index 求H指数(高引用次数,总共有h篇论文分别被引用了至少h次) 先从小到大排序,如果比当前论文被引用次数多的所有论文数量 大于等于 该论文被引次数,该数就是H指数 排序,恶心
275. H-Index II 给一个排好序的数组,求H指数 用找lower bound的二分法来找274的那个比当前论文被引用次数多的所有论文数量 大于等于 该论文被引次数的那个数 二分法
276. Paint Fence 栅栏涂色,不多于两个相同颜色的栅栏相邻 前面和当前一种颜色,则表示更前一个栅栏颜色和右边两个不同, 当前颜色有k-1个颜色可选(排除更前的那个颜色),更前颜色有dp[i - 2]种方式涂,前面和当前不一样颜色,则当前颜色有k-1种选择,前一个颜色总共有dp[i - 1]种方式涂 dp,动态规划
277. Find the Celebrity 找到那个大家都认识但他不认识大家的名人 先遍历,对于遍历到的人i,若候选人认识i,则将候选人设为i,完成一遍遍历后,来检测候选人是否真正是名人 Graph
280. Wiggle Sort 一大一小摆动排序 一增一减,如果当前数不符合就和后面的数交换位置即可 数组,排序
281. Zigzag Iterator 锯齿迭代器 主要是用queue,这样可以兼容不止两个list Queue,List
285. Inorder Successor in BST 二叉搜索树的中序后继node 可以实现中序遍历来找,也可以利用bst的性质,如果当前根节点值大于要找的node,说明当前根节点可能是要找的后继node,记录当前节点并往左移,不然不记录往右移 Inorder递归和迭代,BST
286. Walls and Gates 求每个点到门的最近的曼哈顿距离 首先把门的位置都排入queue中,然后开始循环,对于门位置的四个相邻点,判断其是否在矩阵范围内,并且位置值是否大于上一位置的值加1,如果满足这些条件,将当前位置赋为上一位置加1,并将次位置排入 queue 中,这样等 queue 中的元素遍历完了,所有位置的值就被正确地更新了 BFS
288. Unique Word Abbreviation 查看缩写是否只来自这个单词 如果在起始的字符串数组里至少有两个单词可以表示某一缩略词,把那个缩略词和空字符映射起来,否则缩略词和唯一代表的字符串映射 Hash Table
290. Word Pattern 单词规律,找到每个字符和字符串的映射,字符串之间有空格 因为有空格,所以直接按照空格把字符串分成list,然后再用map和字符一个一个配对尝试就好了 Hash Table
291. Word Pattern II 单词规律 II,找到每个字符和字符串的映射,字符串之间没有空格 没有空格就只能每个都试一遍,字符和字符串两个index,每匹配到一个就移动idx然后递归call检查是否能到终点,不然把之前记录的配对方式从map里删掉 bakctracking
296. Best Meeting Point 所有人最佳的碰头地点,求最小的总移动距离 先按从小到大顺序分别拿到所有人的横坐标和纵坐标,然后用最大坐标减去最小坐标,倒数第二个坐标减去第二个坐标,以此类推,再全部加起来 sorting,math
302. Smallest Rectangle Enclosing Black Pixels 包含黑像素的最小矩阵 与其linear去找每个角的位置,利用题目给的一个黑色坐标,用二分法来寻找每个角的最开始黑色出现的坐标 二分查找
307. Range Sum Query - Mutable 求一个范围内的数字总和,数组会被修改 利用segment tree,创建一个两倍长的数组,后半部分放原数组,前半部分nums[i] = nums[i * 2] + nums[i * 2 + 1],然后更新时从i + n开始,找i j之间和也是从+ n后开始,一直往中间移直到i == j Segment Tree
315. Count of Smaller Numbers After Self 计算数组中每个元素右侧小于当前元素的个数 重建一个有序的list,然后二分法找下界,每个元素都去找到那个第一个不小于当前数的数的位置,那么它前面的数就是都小的,再把当前元素放进list找到的那个位置,来确保list是有序的 Segment Tree/ Binary Search
316. Remove Duplicate Letters 删掉字符串里的所有重复字符,并且要确保返回的字符串是最小答案 创建一个所有字符的次数表,和一个visited表,遍历每个字符,次数减一并且mark visit,并且用stack保存当前字符作为答案,保存前从stack的尾部开始遍历,把比当前字符大的并且次数不为零的字符从stack里删掉,并且visit标为false确保之后会再加回到stack stack,贪心法
319. Bulb Switcher 第n次每n个更改灯泡的状态,n次后亮的灯泡数量 只有平方数有一个相等的因数对,也就少了一次关灯,即所有也只有平方数的灯泡会是点亮的状态 Math
324. Wiggle Sort II 摆动排序 II 把数组一大一小排列好,相等的不能相邻 先用快排找到中位数,因为快排会把大于piovt和小于piovt的分别放在piovt的前后,这时只需要分别从中位数的前面和后面各拿一个数放进新数组就行,记得把和piovt相同的先摆在piovt后面 Quick Select
328. Odd Even Linked List 奇偶链表,把偶数的node提出来接在所有奇数node后面 奇偶两个指针,先把奇指针连到下一个奇指针,移动奇指针,再把偶指针连到下一个偶指针,移动偶指针,最后再把奇指针和偶指针的头尾相连 Two Pointer LinkedList
334. Increasing Triplet Subsequence 找到三个数的递增子序列 双指针分别代表当前最小的数和位于first之后,大于first并且距离first最近的元素,遍历每个数并且更新这两个指针,一旦发现一个数大于这两个数,则发现了答案 双指针,dp
336. Palindrome Pairs 寻找所有的不同的可以组成回文串的索引对 先反向构建Trie树,把所有字符串的坐标存在最后一个node,并把前缀也是回文串的index全部记录在那个字符的node下,然后对每个字符串进行正向匹配,如果遍历到能形成字符串的node,并且当前字符的后部分也是回文,保存,然后如果当前字符全部匹配上的话,则去遍历当前node下的保存了前缀也是回文串的字符串坐标list,当前字符串和这些也可以匹配 Trie,字典树
339. Nested List Weight Sum 嵌套列表权重和 dfs写一个函数根据level来计算当前数的和,并把list的迭代再call这个函数,bfs的话可以用queue一层一层的计算总和 BFS,DFS
346. Moving Average from Data Stream 数据流中的移动平均值 保留一个当前总和,有新的就减去再除以size就是平均值 Queue
353. Design Snake Game 设计贪吃蛇🐍 用一个queue把snake身体的坐标都存起来,每次移动前,先检查新坐标有没有食物,没有的话就去掉老的尾,然后再看queue里有没有坐标和新的头坐标一样,没有的话再加上新的头, Queue
356. Line Reflection 确认所有点关于某条Y轴平行的直线有镜像 先找到X的最大值和最小值,则Y轴的Y值应该是最大值加上最小值除以二,然后利用Y轴检查每个点有没有关于这条Y轴对称 Math
359. Logger Rate Limiter 日志速率限制器, 每条信息十秒内只能出现一次 Hash Table把每条信息上一次发的时间记下来,送分题 Hash Table
360. Sort Transformed Array 有序转化数组, 把数组每个数字都apply一个公式并把结果有序地存到新数组 因为公式是一个抛物线方程式,所以根据a的正负,先处理两边的数,对比大小存进去,再处理中间的数 Math, Heap
362. Design Hit Counter 敲击计数器,返回5分钟内的点击数 queue里保存所有timestamp,取出时把前面离现在不止5分钟的poll出来 Queue
364. Nested List Weight Sum II 深度越深,权重越小,返回所有数乘以权重的和 unweight把每一个深度的总和累积加进去,然后每遍历完一个深度,把unweight加到总和weight,这样深度越浅的就会被多加几次,返回总和weight Queue
370. Range Addition 范围内的数都加上或者减去一个数,更新几次后的最终数组结果 创建一个记录每个坐标和之前坐标相差多少的数组,每次只需要把范围的开头的数加到那个位置上去,再在范围结束的后一位减去之前加上的数,最后根据这个相邻相差多少的数组生成答案 数组
373. Find K Pairs with Smallest Sums 找两个从小到大排列好的数组的总和最小的前k对 创建一个数组记录每个nums1的数当前配对到nums2的第几位,总共找k次,每次都从nums1的第一个数到末尾,每个数都把nums1的和它配对的nums2的数的总和更新,找到当前遍历的总和最小值,再把nums2配对的那个坐标往后移一位 Heap,数组
378. Kth Smallest Element in a Sorted Matrix 排好序的二维数组里的第k大的数 用二分法,范围从二维数组的左上角和右下角开始,查看中间值是第几大的值,然后移动左右直到中间值为第k大,查看数字是第几大从左下角开始,如果要找的数字比当前坐标的数字等于或者大,则当前坐标i上面的数都比要找的数字少,加入count,再把坐标往右移,否则说明当前坐标的数太大了,当前坐标往上移 二分查找,找上界
380. Insert Delete GetRandom O(1) O(1)时间插入、删除和获取随机元素 arraylist把所有数字放进去,hashtable记录下位置,删除时把要删除的元素和arryalist最后一个交换位置再删除,确保O(1) hashtable
381. Insert Delete GetRandom O(1) - Duplicates allowed O(1)时间插入、删除和获取随机元素,可重复 arraylist把所有数字放进去,hashtable里用set记录下同一元素出现的所有位置,删除时把要删除的元素和arryalist最后一个交换位置再删除,确保O(1) hashtable,Set
394. Decode String 字符串解码 k[encoded_string] 先找到数字,再把括号里的字符串迭代call自己解码,再根据次数加到答案里 迭代,stack
419. Battleships in a Board 找到board里的所有战舰 因为战舰只会是一条横着或者竖着,遍历整个board把左边和上边都没有X的X点数记录下来就是战舰数 dfs
448. Find All Numbers Disappeared in an Array 找到数组中所有消失的数字 first pass先把所有不正确的位置和正确位置的数进行交换,直到不能交换为止,然后second pass再把无法交换的数字 数组
454. 4Sum II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0 先把C和D的所有总和放进hashmap,然后计算A和B的和,在hashmap里找负的那个情况 Hash Table
490. The Maze 迷宫是有一个滚动的小球,这样就不是每次只走一步了,而是朝某一个方向一直滚,直到遇到墙或者边缘才停下来,返回是否能到达终点 dfs尝试每一个方向,每次需要把位置一直移到不能再在那个方向移动后,再dfs下一个方向,用二维数组记录下已经visit过的位置 dfs
491. Increasing Subsequences 找到所有递增的子序列数组 dfs尝试每一个数,每次用set来记录已经遍历过的相同数字,在循环跳到下一个数字时确认下个是否已经出现过 dfs
505. The Maze II 迷宫是有一个滚动的小球,这样就不是每次只走一步了,而是朝某一个方向一直滚,直到遇到墙或者边缘才停下来,返回能到达终点的最短路径的长度 Dijkstra 算法,把下一个方向到达的坐标和累积已经花的路径长度放进priority queue,每次取出累积路径最短的,标记为visited然后往四个方向滑,第一个走到终点的就是最短的路径 Dijkstra, bfs
516. Longest Palindromic Subsequence 最长回文子序列 dp[i][j]代表从i到j的最长回文子序列长度,如果i的字符等于j的字符,dp[i][j] = dp[i - 1][j + 1] + 2, 否则就等于去掉i或者j后的最大长度 dp
510. Inorder Successor in BST II 二叉搜索树的中序后继node, 不给root 如果当前node有右节点,则后继节点一定是右节点下的最左节点,不然一直查看当前node的父结点,看父结点的左子节点是否等于当前节点,不等于的话一直移动当前节点为父结点,找到的话说明这个父结点就是下一个后继节点,因为确保了一定是从当前节点的左边在往上走找到的第一个大于当前节点的节点 Inorder递归和迭代,BST
545. Boundary of Binary Tree 找到二叉树的所有边界 先从root左边开始一直往左走把不是leave的node都存起来,再从root遍历所有node把所有叶子从左到右存起来,再从root右边开始一直往右走把不是leave的node存到stack里,再从stack里拿出来存到答案里 stack,Tree
656. Coin Path 给一个数组A,数组元素的值代表当前位置的cost,-1不可以走这个位置,一个整数B表示能走的最大步数。从1开始每次能走B步以内,到达最末尾位置,使得付出总cost值最小,输出字母顺序排列最小路径 dp[i]表示从开头到位置i的最小cost值,从后往前跳,字母大的会被小的覆盖掉,才能得到字母顺序的最小路径,用一个root数组表示下一个位置的坐标 DP
690. Employee Importance 员工的重要性 先创建一个id和employee的hashTable,再dfs从一开始id开始,一直遍历子员工把重要性加上 hash Table
742. Closest Leaf in a Binary Tree 找到离给定k值的node最近的叶节点 从dfs来用hashtable给所有node都分别创建一个它的list,list包含的是下一个可以到达的node,这样就能从子节点返回到父结点,然后再从k节点开始bfs找到第一个叶节点 dfs,bfs,tree
843. Guess the Word 有10次机会来猜出这个单词 先shuffle一下数组,然后一直拿一个单词出来call guess返回的字符匹配数量,然后把list里和当前单词相同字符数不等于那个数字的都删掉,因为当前单词和正确答案的字符匹配数量就是那个,不等于的话说明不是正确答案 Minmax
937. Reorder Data in Log Files 重新排列日志文件 sort排列,把日志按空格分成两部份,再先对比后面那份,再对比前面的标识符 sort
973. K Closest Points to Origin 最接近原点的K个点 用minHeap把所有点放进去,再取出来前k个 sort,heap
997. Find the Town Judge 找那个谁也不信任但所有人都相信的法官 被人信任加1,信任别人则减1,找到那个加到总人数的人就是法官 Graph
1041. Robot Bounded In Circle 机器人是否会回到原地 检查运行完一次命令后的坐标是否为原点坐标,或者朝向是否是北,如果当前方向和初始方向不一致,说明每次执行完一遍指令,机器人都会运动 长度一样,但方向和初始方向角度相差90或者180的向量,多运行几次,向量就会全部被抵消而归零 Math
1003. Check If Word Is Valid After Substitutions 查看一个字符能否由abc插入abc这种组合形成 反向思维,把字符串里的abc一个一个消掉,解法同1047很像,用一个stack来记录之前遍历过的字符,遍历到c的时候就去stack里拿出top两个消掉,如果这两个不是a和b,说明没办法反向形成这种组合 Stack
1047. Remove All Adjacent Duplicates In String 删除字符串中的所有相邻重复项 把答案用一个stack保存,遍历字符串,每个当前字符确认是否和stack的top一样,如果一样就把top移除,否则把当前字符加入到stack的顶端,最后返回stack的结果 Stack
1167. Minimum Cost to Connect Sticks 每连接两个木棍,花费为两个木棍数字相加,把所有木棍连接起来的最低成本 把所有木棍放入从小到大的heap,然后每次拿出最小的两个合并,再把合并的数放进heap Greedy,Heap
1306. Jump Game III 每个元素代表你在该位置可以跳跃的最大长度,判断你是否能够到达最后一个下标 给定起始位置,可以跳到 i + arr[i] 或者 i - arr[i],判断自己是否能够跳到对应元素值为0的地方 dfs, bfs
1423. Maximum Points You Can Obtain from Cards 只能从头或者尾拿卡,一共拿k次,求能拿的最大值 建立两个数组fontSum[i]和backSum[i]分别代表从前面和后面拿i张的和,然后从0到k的组合都试一遍加起来找最大值 dp
1631. Path With Minimum Effort 耗费的体力值是相邻格子的高度差绝对值,从左上角走到右下角的最小体力消耗值 用回溯法暴力试,也可以用二分搜索,因为高度一定小于10^6, 所以我们先创建一个体力值为k是否能到达右下角,然后从0到10^6一直二分搜索来找到那个可以的最小值 backtracking, binary search, dfs

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages