刷题记录
下半年记忆
青春奋斗的日子,触摸理想的岁月
展开
-
刷题记录(Find Bottom Left Tree Value)
Leecode: Find Bottom Left Tree Value(JS解答) function findBottomLeftValue(root: TreeNode | null): number { let resArr:number[] = []; helper(root, 0, resArr); return resArr[resArr.length-1]; }; function helper(root: TreeN原创 2021-05-25 17:49:17 · 89 阅读 · 0 评论 -
刷题记录(Counting Bits)
Leecode: Counting Bits(JS解答)思路:res数组表示所求结果集,preIndex = i&(i-1)表示把i的最后一位1变为0; function countBits(n: number): number[] { let res:number[] = new Array(n+1).fill(0); for(let i = 1; i <= n; i++){ let preIndex = i&(i-1原创 2021-05-25 16:05:04 · 79 阅读 · 0 评论 -
刷题记录(Maximum Swap)
Leecode:Maximum Swap(JS解答)思路:使用一个数组存下 0-9每个数字在num中,从左向右遍历,最后出现时的index位置 function maximumSwap(num: number): number { let numArr = String(num).split(""); let lastArr:number[] = new Array(10).fill(-1); //每个数字最后一次出现的位置 for(let i原创 2021-05-24 15:12:22 · 95 阅读 · 0 评论 -
刷题记录(Delete Node in a BST)
Leecode: Delete Node in a BST(JS解答)解题思路:删除节点前,先通过搜索二叉树的性质找到要删除的节点,找到后,关键的地方来了,被删除节点可能存在以下三种情况:1,叶子节点,左右子节点为null,这种可以直接删除2,左子节点不为空,则需要获取左子树的最大值,然后删除当前节点,遍历调节左子树3,右子节点不为空,则获取右子树的最小值,删除当前节点,遍历调节右子树上代码: function deleteNode(root: TreeNode | null, key:原创 2021-05-09 23:11:44 · 66 阅读 · 0 评论 -
刷题记录(Find Mode in Binary Search Tree)
Leecode: Find Mode in Binary Search Tree思路:中序遍历的时候,重复的数字会连续出现,这是解题的关键上代码: function findMode(root: TreeNode | null): number[] { let base = 0, count = 0, maxCount = 0, res:number[] = []; dfs(root); return res; function h原创 2021-05-09 22:58:46 · 89 阅读 · 0 评论 -
刷题记录(Increasing Subsequences)
leecode: Increasing Subsequences(JS解答)直接上代码: function findSubsequences(nums: number[]): number[][] { let res:number[][] = []; let temp:number[] = []; helper(0, Number.MIN_SAFE_INTEGER,nums); return res; function help原创 2021-05-09 22:53:16 · 90 阅读 · 0 评论 -
刷题记录(Number of Matching Subsequences)
Leecode:Number of Matching Subsequences(JS解答)解题思路:这里采用桶排序的思路,先把words数组按照首字母进行分组,例如:[“a”,“bb”,“acd”,“ace”]=》 “a" : “a”,“acd”,“ace”; “b” : “bb”;然后开始遍历s字符,如examper1中的s:遍历到s【0】(“a”),words => “c” : “cd”,“ce”; “b” : “bb”;遍历到s【1】(“b”),words => “c” :原创 2021-05-09 22:42:59 · 125 阅读 · 0 评论 -
刷题记录(Count Complete Tree Nodes)
Leecode:Count Complete Tree Nodes(JS解答)解法一:暴力搞起 function countNodes(root: TreeNode | null): number { if(root == null) return 0; let left = countNodes(root.left); let right = countNodes(root.right); return left + right +原创 2021-05-04 17:38:13 · 91 阅读 · 0 评论 -
刷题记录(Binary Tree Right Side View)
Leecode: Binary Tree Right Side View(JS解答)dfs思路: function rightSideView2(root: TreeNode | null): number[] { let res:number[] = []; helper(root, 0); return res; function helper(root: TreeNode | null, depth: number){原创 2021-05-04 10:55:31 · 71 阅读 · 0 评论 -
刷题记录(Target Sum)
Leecode: Target Sum (JS解答)解题思路:采用动态规划的思路,首先得出状态转移方程式:dp[i][j] = dp[i - 1][j - nums[i]] + dp[i - 1][j + nums[i]];但是这个不能拿来直接用,因为dp[i][j]依赖dp[i - 1][j - nums[i]],关键是这个nums[i],构成环状依赖了,所以需要对方程式进行变形处理才可以用:dp[i][j] += dp [i-1][j-nums[i]]dp[i][j] += dp [i-1]原创 2021-04-27 18:33:15 · 123 阅读 · 0 评论 -
刷题记录(Relative Sort Array)
Leecode: Relative Sort Array(JS解答)直接上代码: function relativeSortArray(arr1: number[], arr2: number[]): number[] { let count:number[] = new Array(1001).fill(0); for(let i = 0; i < arr1.length; i++){ count[arr1[i]]++; }原创 2021-04-14 10:51:30 · 82 阅读 · 0 评论 -
刷题记录(Reorganize String)
Leecode: Reorganize String(JS解答)解题思路:先用一个数组统计每个字母出现的次数,查看出现次数最高字母的次数,如果次数大于字符串长度的一半,则直接返回空字符串结果,因为不存在符合条件的答案下一步,先把出现次数最多的字母填在结果集的偶数位,填完之后选择下一字母继续填在后面的偶数位,如果超出字符串长度,则开始填奇数位上代码: function reorganizeString(S: string): string { let count:number[]原创 2021-04-13 11:44:22 · 75 阅读 · 0 评论 -
刷题记录(House Robber II)
Leecode: House Robber II (JS解答)解题思路:与此问题的前一个题目相比,此题改动的地方在于把链转改为环状,于是作为起始时,起始点有两种情况,偷与不偷,获取这两种情况下值最大的那个直接上代码,helper方法为动态规划思路方法: function rob(nums: number[]): number { if(nums.length == 0) return 0; if(nums.length == 1) return nums[0];原创 2021-04-01 18:13:16 · 61 阅读 · 0 评论 -
刷题记录(Maximal Square)
leecode: Maximal Square (JS解答)解题思路: 使用动态规划的思路解题,所以重点就是转移方程式:dpArr[i][j] = Math.min(dpArr[i-1][j-1] ,dpArr[i-1][j] ,dpArr[i][j-1]) + 1;在这里,dpArr[i][j]代表以matrix[i][j]为右下角的符合条件的正方形上代码: function maximalSquare(matrix: string[][]): number { if(原创 2021-04-01 18:06:16 · 71 阅读 · 0 评论 -
刷题记录(K-diff Pairs in an Array)
Leecode: K-diff Pairs in an Array(JS解答)直接上代码: function findPairs(nums: number[], k: number): number { if(k < 0) return 0; let saw = new Set(); let diff = new Set(); for(let num of nums){ if(saw.has(num+k)原创 2021-03-29 17:15:14 · 66 阅读 · 0 评论 -
刷题记录(Unique Binary Search Trees II)
Leecode: Unique Binary Search Trees II(JS解答) function generateTrees(n: number): Array<TreeNode | null> { let res: Array<TreeNode | null> = []; if(n == 0) return res; return helper(1, n); }; function helpe原创 2021-03-29 16:45:12 · 99 阅读 · 0 评论 -
刷题记录(Partition List)
Leecode: Partition List(JS解答)直接上代码: function partition(head: ListNode | null, x: number): ListNode | null { let minTemp: ListNode = new ListNode(0); let maxTemp: ListNode = new ListNode(0); let pointMax: ListNode = maxTemp;原创 2021-03-23 16:06:43 · 81 阅读 · 0 评论 -
刷题记录(Path Sum III)
Leecode:Path Sum III(JS解答)思路:贴一个力扣社区的解说图解,通俗易懂上代码:function pathSum(root: TreeNode | null, sum: number): number { let prefixMap:any = {}; let target:number = sum; prefixMap[0] = 1; return recur(root, 0); functi原创 2021-03-20 15:48:52 · 81 阅读 · 0 评论 -
刷题记录(Array Nesting)
Leecode:Array Nesting(JS解答)解题思路:按照题意,形成环状的结果集中的每一个元素只会出现在这个结果集的环里面,而不会出现其他结果集的环里面,于是遍历以每一个元素为起点的环的时候可以用一个布尔数组存储这些已经出现过的节点,因为它不会再出现在其他的环里面,从而提升性能上代码: function arrayNesting(nums: number[]): number { let visited:boolean[] = new Array(nums.length原创 2021-03-04 18:16:10 · 97 阅读 · 1 评论 -
刷题记录(Find All Duplicates in an Array)
Leecode:Find All Duplicates in an Array(JS解题)解题思路:用原数组来作为存储数值位置的数组,第一次遍历的时候进行取反操作,当操作过程中遇到负数,说明遇到了重复数值,压入结果集上代码: function findDuplicates(nums: number[]): number[] { let res:number[] = []; for(let i = 0; i < nums.length; i++){原创 2021-03-03 11:52:52 · 133 阅读 · 0 评论 -
刷题记录(Subarray Sum Equals K)
Leecode:Subarray Sum Equals K(JS解答)思路:采用哈希表加前缀和的思路来解题 function subarraySum(nums: number[], k: number): number { let mapobj:any = {}; let count = 0; let temp = 0; mapobj[0] = 1; for(let i = 0; i < nums.length原创 2021-03-03 11:47:07 · 107 阅读 · 0 评论 -
刷题记录(Find Minimum in Rotated Sorted Array II)
Leecode: Find Minimum in Rotated Sorted Array II(JS解答)思路:采用二分法,注意当出现重复元素时的处理,上代码: function findMin(nums: number[]): number { let start = 0; let end = nums.length-1; while (start < end){ let pivot = (start + end)原创 2021-02-24 18:08:26 · 66 阅读 · 0 评论 -
刷题记录(Triangle)
Leecode:Triangle(JS答题)思路:采用动态规划的思路来解题,状态转换是注意每层两端的状态转移特殊处理一下上代码: function minimumTotal(triangle: number[][]): number { let n:number = triangle.length; let f:number[][] = new Array(n); let res:number; for(let i = 0; i <原创 2021-02-19 16:43:15 · 69 阅读 · 0 评论 -
刷题记录(Trapping Rain Water)
Leecode:Trapping Rain Water(JS解答)思路一:动态规划,遍历1 - height.length-2之间的元素,每个元素向两端扩展 function trap(height: number[]): number { let leftHeight:number[] = new Array(height.length).fill(0); let rightHeight:number[] = new Array(height.length).fi原创 2021-02-18 18:12:06 · 67 阅读 · 0 评论 -
刷题记录(Subsets II)
Leecode:Subsets II(JS解答)思路:先对数组进行排序,让后采用回溯的办法求结果集合 function subsetsWithDup(nums: number[]): number[][] { let res:number[][] = []; nums.sort((a,b)=>a-b); helper(nums,0,[],res); return res }; function helper(nums:原创 2021-02-18 18:05:51 · 92 阅读 · 0 评论 -
刷题记录(Reorder List)
Leecode: Reorder List(JS解答)解题思路:用一个数组按顺序存储所有节点,让后用前后两个指针遍历数组,重构单向链表,上代码: function reorderList(head: ListNode | null): void { if(head == null || head.next == null) return; let nodeList:ListNode[] = []; while (head != null){原创 2021-02-16 18:22:21 · 171 阅读 · 0 评论 -
刷题记录(Combinations)
Leecode:Combinations(JS解答)直接上代码: function combine(n: number, k: number): number[][] { let res:number[][] = new Array(); let tempArr:number[] = new Array(); helper(res,[],1,n,k); return res; }; function helper(res:n原创 2021-02-16 17:45:38 · 110 阅读 · 0 评论 -
刷题记录(Combination Sum)
Leecode:Combination Sum(JS解答)思路:利用回溯算法 function combinationSum(candidates: number[], target: number): number[][] { let res:number[][] = new Array(); if(candidates.length == 0) return res; candidates.sort((a,b)=>a-b); //这里排序是原创 2021-02-02 17:17:34 · 81 阅读 · 0 评论 -
刷题记录(Remove Duplicates from Sorted Array II)
Leecode: Remove Duplicates from Sorted Array II(JS解答) function removeDuplicates(nums: number[]): number { let j = 1; let count = 1; for(let i = 1; i < nums.length; i++){ if(nums[i] == nums[i-1]){ c原创 2021-01-28 16:58:55 · 81 阅读 · 0 评论 -
刷题记录(Spiral Matrix II)
Leecode:Spiral Matrix II(JS解答)直接上代码: function generateMatrix(n: number): number[][] { let total:number = n * n; let l = 0; let r = n-1; let t = 0; let b = n-1; let res:number[][] = new Array(n); l原创 2021-01-28 16:54:53 · 87 阅读 · 0 评论 -
刷题记录(Search a 2D Matrix)
Leecode:Search a 2D Matrix(JS解答)思路:在二维数组里面找目标值是否存在,因为题目给定的条件,每一行的第一个数大于上一行的最后一个数,于是我们直接把它当成一个一位数组,让后用二分法进行解题: function searchMatrix(matrix: number[][], target: number): boolean { let totalNum:number = matrix.length * matrix[0].length; let原创 2021-01-28 16:50:27 · 92 阅读 · 0 评论 -
刷题记录(Find the Most Competitive Subsequence)
Leecode:Find the Most Competitive Subsequence(JS解答)function mostCompetitive(nums: number[], k: number): number[] { let stack:number[] = []; stack[0] = -1; //用来规避stock被清空的问题,因为nums里面的数都大于-1,所以stock永不为空 let res:number[] = new Array原创 2021-01-22 11:10:26 · 245 阅读 · 0 评论 -
刷题记录(Longest Palindromic Substring)
Leecode:Longest Palindromic Substring(JS解答)解法一:动态规划思路 function longestPalindrome(s: string): string { let len:number = s.length; let dp:boolean[][] = new Array(len); if(s.length == 0) return ""; let res:string = s.cha原创 2021-01-20 12:08:42 · 104 阅读 · 0 评论 -
刷题记录(Max Number of K-Sum Pairs)
Leecode:Max Number of K-Sum Pairs(JS解答) function maxOperations(nums: number[], k: number): number { nums.sort((a,b)=>a-b); let min:number = 0; let max:number = nums.length-1; let res:number = 0; while(min <原创 2021-01-19 16:27:29 · 107 阅读 · 0 评论 -
刷题记录(Course Schedule)
Leecode:Course Schedule(JS解答)思路:采用拓扑原理,依据题意构成有向无环图,判断是否存在环路在解题时,使用邻接表来存储边,同时用一个数组存储每个节点的入度(即有多少有向边指向它),让后广度优先遍历去除入度为0的节点,如果最后能顺利去除所有节点,则证明构成有向无环图。 function canFinish(numCourses: number, prerequisites: number[][]): boolean { let adjacencyList原创 2021-01-06 15:10:55 · 152 阅读 · 0 评论 -
刷题记录(Decode Ways)
Leecode:Decode Ways(JS解答)思路:使用动态规划 function numDecodings(s: string): number { if(s == null || s.length == 0) return 0; let dep:number[] = new Array(s.length+1).fill(0); dep[0] = 1; dep[1] = s.charAt(0) == "0"?0:1;原创 2021-01-06 14:50:30 · 90 阅读 · 0 评论 -
刷题记录(Word Break II)
Leecode:Word Break II(JS解答)思路:使用一个map对象wordMap存储某个字符串s符合条件的组合对象数组,比如s = “catsanddog”,wordMap【s】= [“cats and dog”,“cat sand dog”];然后使用递归的思路 function wordBreak(s: string, wordDict: string[]): string[] { var wordMap:any = {}; return hel原创 2021-01-06 11:24:51 · 96 阅读 · 0 评论 -
刷题记录(Word Break)
Leecode:Word Break(JS解答)思路:此处采用动态规划的思路,直接上代码:function wordBreak(s: string, wordDict: string[]): boolean { let len:number = s.length; let wordDictSet:Set<string> = new Set(wordDict); let temp:Array<boolean> = new Array(len+1).fi原创 2021-01-06 11:07:53 · 92 阅读 · 0 评论 -
刷题记录(Perfect Squares)
leecode:Perfect Squares(JS解答)思路一:动态规划function numSquares1(n: number): number { let squareNums:number[] = []; let square_n = Math.floor(Math.sqrt(n)); let dp:number[] = new Array(n+1).fill(Number.MAX_SAFE_INTEGER); for(let i = 0;原创 2021-01-06 11:00:46 · 119 阅读 · 0 评论 -
刷题记录(Sliding Window Maximum)
Leecode:Sliding Window Maximum(JS解答)function maxSlidingWindow(nums: number[], k: number): number[] { var res:number[] = []; if(nums.length == 0 || k < 0) return res; var tempArr:number[] = []; var resIndex:number = 0;原创 2020-12-27 18:31:36 · 83 阅读 · 0 评论