数据结构与算法
ytsiste
这个作者很懒,什么都没留下…
展开
-
数据结构之树--110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) *原创 2021-02-14 11:28:10 · 237 阅读 · 1 评论 -
数据结构之树--112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true/** * Definition for a binary tree node. * function TreeNode(va原创 2021-02-14 09:14:12 · 301 阅读 · 0 评论 -
102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层序遍历结果:[[3],[9,20],[15,7]]/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.ri原创 2021-02-14 08:09:37 · 201 阅读 · 0 评论 -
数据结构之树--111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left原创 2021-02-14 07:08:08 · 252 阅读 · 0 评论 -
数据结构之树--104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。 //res记录的是最大深度 let res=0; //先深度遍历,用l来记录每次的层级 const dfs=(n,l)=>{ if(!n) {return ;} //等到原创 2021-02-13 11:43:04 · 97 阅读 · 0 评论 -
数据结构之链表--141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4], po原创 2021-02-12 16:59:55 · 103 阅读 · 0 评论 -
数据结构之链表--83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {ListNode} */var d原创 2021-02-12 16:00:49 · 139 阅读 · 0 评论 -
数据结构之链表--2. 两数相加
##给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807/** * Definition for singly-linked list. * function ListNode(val, ne原创 2021-02-12 11:43:37 · 177 阅读 · 1 评论 -
数据结构之链表--237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9./** * Definition for singly-linked list. * function ListNode(v原创 2021-02-11 21:04:05 · 155 阅读 · 0 评论 -
数据结构之链表--206. 反转链表
反转一个单链表。示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @retu原创 2021-02-11 20:53:59 · 81 阅读 · 0 评论 -
算法之动态规划-- 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。/**/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { if(!nums.length){ return null } let max=nums[0] let cur=0 for(let i=0,len=num原创 2021-02-09 10:27:46 · 130 阅读 · 0 评论 -
js数据结构-栈--682. 棒球比赛
你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:整数 x - 表示本回合新获得分数 x“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。“原创 2021-02-07 14:34:11 · 259 阅读 · 0 评论 -
js算法之排序类--41. 缺失的第一个正数
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。解法一:var firstMissingPositive = function(nums) { //先把负数和0过滤掉 nums=nu原创 2021-02-06 13:22:38 · 265 阅读 · 0 评论 -
js算法之排序类--选择排序
var select = function(arr) { //i代表最外层循环次数,最后一个数不用比较了,即i<len-1 for (let i = 0, len = arr.length; i < len - 1; i++) { // j代表每轮比较从i+1开始, for (let j = i + 1; j < len; j++) { //如果前一个值大于后一个值,交换位置 .原创 2021-02-06 11:33:38 · 97 阅读 · 0 评论 -
js算法之排序类--冒泡排序
function bubble(arr) { for (let i = arr.length - 1; i > 0; i--) { for (let j = 0; j < i; j++) { let temp = arr[j] if (arr[j] > arr[j + 1]) { arr[j] = arr[j原创 2021-02-06 00:28:19 · 96 阅读 · 0 评论 -
js算法之排序类--164. 最大间距
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。/**@param {number[]} nums@return {number}*/解法一:var maximumGap = funct原创 2021-02-05 22:33:52 · 162 阅读 · 0 评论 -
js算法之排序类--215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。/**@param {number[]} nums@param {number} k@return {number}*/解法一:var f原创 2021-02-05 21:52:41 · 176 阅读 · 0 评论