算法
布里渊区
这个作者很懒,什么都没留下…
展开
-
算法:零钱兑换
力扣https://leetcode-cn.com/problems/coin-change/给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1 。你可以认为每种硬币的数量是无限的。思路:动态规划求解/** * @param {number[]} coins 面额数组 [1,2,5,7] * @param {number}...原创 2021-09-29 11:04:28 · 230 阅读 · 0 评论 -
环形链表 II
力扣https://leetcode-cn.com/problems/linked-list-cycle-ii/给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。/** * Definition for singly...原创 2021-09-28 14:25:46 · 73 阅读 · 0 评论 -
删除排序链表中的重复元素 II
力扣https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。返回同样按升序排列的结果链表。var deleteDuplicates = function(head) { //定义一个虚拟节点 let dummyHead=new ListN...原创 2021-09-28 11:25:08 · 92 阅读 · 0 评论 -
验证二叉搜索树
力扣https://leetcode-cn.com/problems/validate-binary-search-tree/给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:充分利用二叉搜索树各个节点的大小关系进行递归/** * Definition for a binary tree node. *原创 2021-09-23 11:48:19 · 85 阅读 · 0 评论 -
二叉树的中序遍历
力扣https://leetcode-cn.com/problems/binary-tree-inorder-traversal/给定一个二叉树的根节点root,返回它的中序遍历。/** * @param {TreeNode} root * @return {number[]} */ var inorderTraversal = function(root) { if(!root){ return [] } let res =[]...原创 2021-09-18 18:17:48 · 89 阅读 · 0 评论 -
最大正方形
力扣https://leetcode-cn.com/problems/maximal-square/在一个由'0'和'1'组成的二维矩阵内,找到只包含'1'的最大正方形,并返回其面积。//可以使用动态规划降低时间复杂度。我们用dp(i,j)表示以(i,j)为右下角,//且只包含1的正方形的边长最大值。//如果我们能计算出所有dp(i,j)的值,//那么其中的最大值即为矩阵中只包含1的正方形的边长最大值,其平方即为最大正方形的面积。...原创 2021-09-18 17:35:26 · 79 阅读 · 0 评论 -
算法:路径总和 II
力扣https://leetcode-cn.com/problems/path-sum-ii/给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。var pathSum = function(root, targetSum) { let result=[] dfs(root,targetSum,[]) function dfs(root,targetSum,path){ ...原创 2021-09-17 12:04:36 · 172 阅读 · 0 评论 -
算法:路径总和
力扣https://leetcode-cn.com/problems/path-sum/给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。var hasPathSum = function(root, targetSum) { if(!root){ return false } let nodeList=[],valueLis...原创 2021-09-16 20:41:57 · 127 阅读 · 0 评论 -
x 的平方根
力扣https://leetcode-cn.com/problems/sqrtx/给你一个非负整数x,计算并返回x的平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去 。//二分法求 平方根var mySqrt = function(x) { let n =Math.ceil( x/2) if(n===1) return n let start=0,end=n while(start<=end){ ...原创 2021-09-16 17:00:36 · 71 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
力扣https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根节点。原创 2021-09-16 11:43:01 · 88 阅读 · 0 评论 -
对称二叉树
力扣https://leetcode-cn.com/problems/symmetric-tree/给定一个二叉树,检查它是否是镜像对称的。var isSymmetric = function(root) { return check(root,root) // 每次用两个指针做判断 // 先判断两节点的存在情况对结果的影响 // 再判断两节点的值是否相等 // 最后对两节点镜像位置的孩子递归重复以上步骤 function ch原创 2021-09-15 15:21:37 · 97 阅读 · 0 评论 -
反转链表(其中部分片段反转)
力扣https://leetcode-cn.com/problems/reverse-linked-list-ii/给你单链表的头指针 head 和两个整数left 和 right ,其中left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。var reverseBetween = function(head, left, right) { // 设置 dummyNode 是这一类问题的一般做法,使用虚拟头节点可以...原创 2021-09-14 17:09:11 · 470 阅读 · 0 评论 -
算法:合并区间
https://leetcode-cn.com/problems/merge-intervals/以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。解题思路:排序+合并 参见官方解答思路/** * @param {number[][]} intervals * @return {number[][]} */var...原创 2021-09-13 17:05:27 · 85 阅读 · 0 评论 -
求根节点到叶节点数字之和
力扣https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字:例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。/** * Definition for a binary tree nod原创 2021-09-13 15:54:38 · 189 阅读 · 0 评论 -
全排列:回溯法
https://leetcode-cn.com/problems/permutations/给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。var permute = function(nums) { const res = [], path = []; backtracking(nums, {}); return res; function backtracking(nums, used) {...原创 2021-09-07 14:33:54 · 136 阅读 · 0 评论 -
二叉树的层序遍历
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。var levelOrder = function(root) { if(!root){ return [] } let result=[] let stack=[root] while(st..原创 2021-09-06 17:51:10 · 65 阅读 · 0 评论 -
环形链表的判断
https://leetcode-cn.com/problems/linked-list-cycle/给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。如果链表中存在环,则返回true。 否则,返回false。var hasCycle = function(head) { if(!head || !head.next){ return false } let ...原创 2021-09-06 17:39:01 · 72 阅读 · 0 评论 -
算法:重排链表
https://leetcode-cn.com/problems/reorder-list/给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0→ L1→ … → Ln-1→ Ln请将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→ …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。/** * Definition for singly-linked list. * function ListNode...原创 2021-09-02 20:30:33 · 107 阅读 · 0 评论 -
下一个排列
https://leetcode-cn.com/problems/next-permutation/实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。/*解题方法:从数组尾部找一个大数和前面的一个小数进行交换得到下一个比较大的排列此外还需要了解一个定理:若数列不是单调递减,那么一定存在相邻升.原创 2021-09-02 18:04:55 · 75 阅读 · 0 评论 -
二叉树的右视图
https://leetcode-cn.com/problems/binary-tree-right-side-view/给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。/** * @param {TreeNode} root * @return {number[]} */ var rightSideView = function(root) { //层序遍历,取每层最右值即可 if(root==..原创 2021-09-01 16:21:01 · 150 阅读 · 0 评论 -
合并两个有序数组
https://leetcode-cn.com/problems/merge-sorted-array/给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后.原创 2021-09-01 11:59:43 · 173 阅读 · 0 评论 -
字符串相加(大数相加)
https://leetcode-cn.com/problems/add-strings/给定两个字符串形式的非负整数num1和num2,计算它们的和。提示:num1 和num2的长度都小于 5100num1 和num2 都只包含数字0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式/** * @param {string} num1 * @param {string} num2 * @...原创 2021-08-31 15:05:36 · 237 阅读 · 0 评论 -
最长递增子序列
https://leetcode-cn.com/problems/longest-increasing-subsequence/给你一个整数数组nums,找到其中最长严格递增子序列的长度。var lengthOfLIS = function(nums) { let n= nums.length if(n<2){ return n } let max=1 let dp=new Array() dp[0]=1 ...原创 2021-08-31 14:36:22 · 89 阅读 · 0 评论 -
算法:螺旋矩阵
https://leetcode-cn.com/problems/spiral-matrix/给你一个m行n列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。var spiralOrder = function(matrix) { let result=[] let dirction='row' // row nrow column ncolumn while(matrix.length && matrix[0].l...原创 2021-08-31 10:35:43 · 96 阅读 · 0 评论 -
最大子序和
https://leetcode-cn.com/problems/maximum-subarray/给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。// 在每一个扫描点计算以该点数值为结束点的子数列的最大和(正数和)。// 该子数列由两部分组成:以前一个位置为结束点的最大子数列、该位置的数值。// 因为该算法用到了“最佳子结构”(以每个位置为终点的最大子数列都是基于其前一位置的最大子数列计算得出, // 该算法可看成动态规划的一个例子。..原创 2021-08-30 16:55:42 · 78 阅读 · 0 评论 -
合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (ne...原创 2021-08-23 17:46:51 · 73 阅读 · 0 评论 -
岛屿的数量
https://leetcode-cn.com/problems/number-of-islands/给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。题解:利用深度优先搜索,遍历整个网格,遇到1,岛屿数就加1,然后将该岛屿炸毁(因为已经计数过了),炸毁:就是将该岛屿置为0/** * @param {character[][]..原创 2021-08-23 16:47:31 · 68 阅读 · 0 评论 -
搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一.原创 2021-08-19 17:22:55 · 71 阅读 · 0 评论 -
二叉树的最近公共祖先
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。var lowestCommonAncestor = function(root, p, q) {原创 2021-08-18 17:32:21 · 74 阅读 · 0 评论 -
算法:两数之和
https://leetcode-cn.com/problems/two-sum/给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。/** * @param {number[]} nums * @param {number} target * @return {number[]} ...原创 2021-08-18 15:24:47 · 189 阅读 · 0 评论 -
相交的链表
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。/** * @param {ListNode} headA * @param {ListNode} headB * @return {ListNode} */ var getIntersectionNode = functio...原创 2021-08-17 11:58:27 · 106 阅读 · 0 评论 -
三个数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。https://leetcode-cn.com/problems/3sum/var threeSum = function(nums) { let result = [] if(nums.length<3){ return [] } num...原创 2021-08-13 16:07:31 · 110 阅读 · 0 评论 -
买卖股票的最佳时机
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。/** * @param {number[]} prices ..原创 2021-08-12 20:19:33 · 69 阅读 · 0 评论 -
二叉树的锯齿形层序遍历
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal//** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : le原创 2021-08-12 17:04:32 · 86 阅读 · 0 评论 -
反转单链表
https://leetcode-cn.com/problems/reverse-linked-list/给你单链表的头节点head,请你反转链表,并返回反转后的链表。注意:此题需要注意链表的数据结构和特性/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (...原创 2021-08-05 20:01:20 · 119 阅读 · 0 评论 -
数组中第K个最大元素
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。var findKthLargest = function(nums, k) { nums.sort(function(x,y){ return y-x }) return nums[k...原创 2021-08-05 11:40:07 · 183 阅读 · 0 评论 -
无重复字符的最长子串
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。function isRepeat(s){ let arr = s.split('') let set = new Set(arr) return set.size < arr.length}var lengthOfLongestSub...原创 2021-08-05 10:53:20 · 81 阅读 · 0 评论 -
最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/submissions///判断字符串是否是回文串function isValid(str){ let start=0 let end=str.length-1 while (end>0 && start <str.length && start<=end) { if(str.cha原创 2021-08-02 11:44:20 · 90 阅读 · 0 评论 -
最长递增数组
https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。function getMaxAscArr(arr){ let start=0 let len=0 for(let i=0;i<arr.length;i++){ if(i>0 && arr[i]<..原创 2021-07-30 14:39:22 · 160 阅读 · 0 评论 -
算法专题汇总(javascript前端版本)
1、快速排序https://blog.csdn.net/cctvcqupt/article/details/107614866?spm=1001.2014.3001.55012、编译器括号配对https://blog.csdn.net/cctvcqupt/article/details/107611384?spm=1001.2014.3001.55013、二叉搜索树的生成https://blog.csdn.net/cctvcqupt/article/details/107608942?s原创 2021-07-28 16:37:03 · 112 阅读 · 0 评论