
刷题
文章平均质量分 69
露西西★
努力学习前端知识,坚持刷题的露西西~~
展开
-
js.24两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。每找到两个节点就交换位置,这里需要注意left是否是头节点的情况,交换完位置后重新记录center和right的值。用left记录两个节点的前一个节点,用center记录第一个节点,用right记录第二个节点。原创 2025-04-23 10:19:15 · 299 阅读 · 0 评论 -
js.全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。原创 2025-04-16 14:14:19 · 252 阅读 · 0 评论 -
js.最长回文子串
给你一个字符串 s,找到 s 中最长的 回文 子串。原创 2025-04-16 08:55:23 · 276 阅读 · 0 评论 -
算法讲解——动态规划
动态规划(Dynamic Programming, DP)是一种解决复杂问题的算法思想,它将大问题分解为小问题,通过存储和重用子问题的解来避免重复计算,从而提高效率。原创 2025-03-27 16:23:37 · 464 阅读 · 0 评论 -
算法讲解——滑动窗口
滑动窗口是一种用于处理数组/字符串子区间问题的高效算法技巧,通过维护一个动态的窗口(通常是连续的区间),在遍历数据时调整窗口的左右边界,避免重复计算,从而将时间复杂度优化至 O(n)。原创 2025-03-25 15:51:24 · 814 阅读 · 0 评论 -
算法讲解——双指针算法(js示例代码)
同向双指针:两个指针从同一侧开始移动,通常用于滑动窗口或链表操作。对向双指针:两个指针从两侧向中间移动,通常用于有序数组的搜索或判断问题。快慢双指针:两个指针以不同速度移动,通常用于链表中的环检测或中点查找。原创 2025-03-21 16:13:52 · 419 阅读 · 0 评论 -
js.128最长连续序列
算法:讲的太好啦~~原创 2025-03-20 14:24:17 · 290 阅读 · 0 评论 -
算法讲解——贪心算法
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(局部最优)的选择,从而希望导致全局最优解的算法策略。贪心算法的核心思想是“贪心选择”,即通过局部最优解逐步构建全局最优解。原创 2025-03-18 15:22:30 · 839 阅读 · 0 评论 -
js.49字母异位词分组
map为 Map(3) { 'aet' => 0, 'ant' => 1, 'abt' => 2 }记录该字符串和flag索引,将字符串单独添加进二维数组的末尾,flag++;从map中取出对应的索引,将该字符串添加该索引的二维数组。我们需要把"ate","eat","tea"都看成一类,那么我们可以。使用map集合,存放每组排序后的字符串和对应的数组索引。是由重新排列源单词的所有字母得到的一个新单词。,他们排序后都是“aet”可以放在一类。用flag记录数组索引,从0开始。给你一个字符串数组,请你将。原创 2025-03-17 17:52:48 · 118 阅读 · 0 评论 -
js.316去除重复字母
2,该元素小于栈顶元素,如果此时栈顶元素是最大下标说明后面没有这个字母了,不进行操作,直接让该元素入栈,退出循环。如果此时栈顶元素不是最大下标,说明后面还会有这个字母,将栈顶元素出栈,继续循环判断新的栈顶元素是不是最大下标。解释为什么栈中已经有该元素直接跳过:如果栈中有该元素,那么栈顶元素一定大于或者等于该元素,使用单调栈的思路,明白一个道理,尽最大可能把最小的放在前面,所以优先最小的元素。,请你去除字符串中重复的字母,使得每个字母只出现一次。1,该元素大于栈顶元素,直接入栈。如果是空栈,直接入栈。原创 2025-03-03 20:10:00 · 300 阅读 · 0 评论 -
js.324摆动排序 II
1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。你可以假设所有输入数组都可以得到满足题目要求的结果。先将nums进行降序排序,n为要循环的次数。原创 2025-02-28 18:31:07 · 229 阅读 · 0 评论 -
js.字符串解码
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。使用递归和栈的思路,就可以将题目解出来。有一个情况需要考虑,就是数字可能不止一位数的情况。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,表示其中方括号内部的。原创 2025-02-18 15:51:53 · 305 阅读 · 0 评论 -
js.字典序排数
使用dfs深度优先搜索,从1开始进行搜索,每次搜索的当前值是cur*10+i。同时,如果当前搜到的数字的长度和n的长度一样,也不用继续搜索了。条件是如果搜到的当前值大于n,就截止。你必须设计一个时间复杂度为。原创 2025-02-17 16:02:29 · 153 阅读 · 0 评论 -
js.根据身高重建队列
编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。接下来,就按照array2D数组的顺序,依次排序。原创 2025-02-14 14:43:35 · 426 阅读 · 0 评论 -
js.买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。原创 2025-02-12 17:22:46 · 134 阅读 · 0 评论 -
js.重排链表
然后将第一个元素的next指向最后一个元素,最后一个元素的next指向headRight,最后一个元素的前一个元素的next赋值为NULL。每次处理就是遍历链表得到最后一个元素和最后一个元素的前一个元素,不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。处理完后,将headRight继续递归,直到链表长度小于3。只要链表的长度大于等于3,就可以进行处理。headRight是链表的第二个元素。我使用的是递归的方法。原创 2024-12-04 16:31:14 · 384 阅读 · 0 评论 -
js.二叉搜索树中第K小的元素
没看清题目是搜索二叉树,误以为是二叉树,所以用的是层次遍历,时间较慢。,请你设计一个算法查找其中第。小的元素(从 1 开始计数)。给定一个二叉搜索树的根节点。原创 2024-11-27 16:14:45 · 449 阅读 · 0 评论 -
js.二叉树的层序遍历2
(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)原创 2024-11-26 21:10:52 · 690 阅读 · 0 评论 -
js.矩阵中的蛇
题目测评数据保证蛇在整个移动过程中将始终位于。蛇从单元格 0 开始,并遵循一系列命令移动。的大小,另给你一个字符串数组。后蛇所停留的最终单元格的位置。原创 2024-11-21 15:27:52 · 461 阅读 · 0 评论 -
js.二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(如果本身加上左和右的sum值 == 2 ,则让newnode等于root,记录当前节点。通过递归的方式来实现栈结构,用 sum 来记录本身加上左和右的含 p 和 q 的数量。结束条件是 if(newnode!如果newnode不为空,说明找到了最近公共祖先节点,直接结束查找。因为根据定义最近公共祖先节点可以为节点本身。的最近公共祖先是节点。的最近公共祖先是节点。原创 2024-11-18 09:09:22 · 790 阅读 · 0 评论 -
js.相交链表
请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。,函数返回结果后,链表必须。原创 2024-11-15 15:45:59 · 1763 阅读 · 0 评论 -
js.删除并获得点数
前 i 个的最大点数为 如果前 i - 2 的最大点数加上第 i 个的点数大于前 i - 1 的最大点数,那么前 i 个的最大点数为前 i - 2 的最大点数加上第 i 个的点数,否则为前 i - 1 的最大点数。先创建长度为数组中最大值+1的数组arr,将nums数组中的对应值x,加到arr[x]中去,得到的数组arr的每个值item为数组 nums 中所有相同元素item之和。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 4 获得 4 个点数,因此 3 也被删除。原创 2024-11-12 18:57:23 · 919 阅读 · 0 评论 -
js.零钱兑换
// 一定要加上item原创 2024-11-11 23:03:59 · 574 阅读 · 0 评论 -
js.青蛙过河
青蛙可以成功过河,按照如下方案跳跃:跳 1 个单位到第 2 块石子, 然后跳 2 个单位到第 3 块石子, 接着 跳 2 个单位到第 4 块石子, 然后跳 3 个单位到第 6 块石子, 跳 4 个单位到第 7 块石子, 最后,跳 5 个单位到第 8 个石子(即最后一块石子)。最远可跳到的第几个石头值如果为stones的长度-1,表示可以跳到最后一个石头上,则结束函数返回true。代码中的 f 是sum数组的索引,f 每次++ ,代表跳到了第几块石头。另请注意,青蛙只能向前方(终点的方向)跳跃。原创 2024-11-07 17:42:13 · 689 阅读 · 0 评论 -
js.打家劫舍
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。从第三个值开始,arr数组的每一个值为arr[i-2] + nums[i]和arr[i-1]的最大值。先求出前两个的值,第一个值为nums[0],第二个值为nums[0]和nums[1]的最大值。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。,一夜之内能够偷窃到的最高金额。原创 2024-11-05 14:43:12 · 370 阅读 · 0 评论 -
js.轮转数组和旋转链表
1 数组长度比k大,先取出数组的后k个值复制到新的数组。让第nums.length-1-i的值,等于它的第前k的值。再将新数组的值赋值到nums的前k个值。2 长度比k小,反复让k减去数组长度,直到数组长度大于k。向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100],将数组中的元素向右轮转。首先分为两种情况来写,原创 2024-11-04 22:33:53 · 618 阅读 · 0 评论 -
js.相同的树
如果结点值相同且不为null,将数组第一个元素的左右结点放入数组队列,删除数组第一个元素;如果结点值相同且为null,将数组第一个元素删除后,函数continue。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。层次遍历,如果两棵树结点的值不一样,返回false;,编写一个函数来检验这两棵树是否相同。// 比较值,分情况判断。// 取出两个树的值。给你两棵二叉树的根节点。原创 2024-10-29 15:55:35 · 1043 阅读 · 0 评论 -
js.最长回文串
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。可以构造的最长回文串是"a",它的长度是 1。给定一个包含大写字母和小写字母的字符串。不能当做一个回文字符串。通过这些字母构造成的。在构造过程中,请注意。原创 2024-10-26 00:04:51 · 413 阅读 · 0 评论 -
js.最长重复子数组
如果 A[i] == B[j],那么我们知道 A[i:] 与 B[j:] 的最长公共前缀为 A[i + 1:] 与 B[j + 1:] 的最长公共前缀的长度加一,否则我们知道 A[i:] 与 B[j:] 的最长公共前缀为零。考虑到这里 dp[i][j] 的值从 dp[i + 1][j + 1] 转移得到,所以我们需要倒过来,首先计算 dp[len(A) - 1][len(B) - 1],最后计算 dp[0][0]。N 表示数组 A 的长度,M 表示数组 B 的长度。空间复杂度: O(N×M)。原创 2024-10-24 23:08:16 · 1024 阅读 · 0 评论 -
js.岛屿数量
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。原创 2024-10-23 13:21:54 · 480 阅读 · 0 评论 -
js.两数相加(链表)和反转链表
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。原创 2024-10-22 16:34:13 · 899 阅读 · 0 评论 -
js.寻找峰值,x的平方根(二分查找)
找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回。或者返回索引 5, 其峰值元素为 6。3 是峰值元素,你的函数应该返回其索引 2。你的函数可以返回索引 1,其峰值元素为 2;峰值元素是指其值严格大于左右相邻值的元素。// 左右两边同时判断。// n为数组的长度。// 考虑边界的问题。你必须实现时间复杂度为。的算法来解决此问题。原创 2024-10-21 10:31:17 · 331 阅读 · 0 评论 -
js.水壶问题
这里面有一个注意点,就是如果set集合中放的是[0,0]这种的数组,那么set.has比较的是数组的原地址,而不是数组中的值。初始的a和b为0,[0,0]先入栈,然后每次取出栈中的第一个元素并让它出栈,分析它的这六种情况,将可行的情况入栈。6. 从 5 升的水壶向 3 升的水壶倒水直到 3 升的水壶倒满。2. 把 5 升的水壶倒进 3 升的水壶,留下 2 升(3, 2)。4. 把 2 升水从 5 升的水壶转移到 3 升的水壶(2, 0)。考虑原水壶的水空了和倒入水的水壶满了的情况。原创 2024-10-20 20:13:30 · 1766 阅读 · 0 评论 -
js.二叉树的最大深度
/将数组中的第一个元素的两个节点入栈。//次数减一,因为最后一次一定是全为空的数组。是指从根节点到最远叶子节点的最长路径上的节点数。原创 2024-10-19 22:35:52 · 429 阅读 · 0 评论 -
js.杨辉三角和分发饼干
在「杨辉三角」中,每个数是它左上方和右上方的数的和。生成「杨辉三角」的前 numRows。给定一个非负整数 numRows。原创 2024-10-18 20:30:52 · 626 阅读 · 0 评论 -
js.丢失的数字
n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。// 计算1到n的和。原创 2024-10-17 19:43:10 · 439 阅读 · 0 评论 -
js.爬楼梯
climbStairs(n-2)+climbStairs(n-1)就是爬到第n阶的方法次数。若最后一步是1,则方法次数和爬到第n-1阶的方法次数相同,若最后一步是2,则方法次数和爬到第n-2阶的方法次数相同。每次爬到第n阶的方法,最后一步要么是1,要么是2。你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。原创 2024-10-16 11:30:28 · 431 阅读 · 0 评论 -
js.比较版本号
version1 的第二个修订号为 "2",version2 的第二个修订号为 "10":2 < 10,所以 version1 < version2。依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为。version1 有更少的修订号,每个缺失的修订号按 "0" 处理。忽略前导零,"01" 和 "001" 都代表相同的整数 "1"。// 如果arr2[i]中没有数据,b为NaN。//arr1数组数据更多,有剩余。//arr2数组数据更多,有剩余。//如果相等,继续判断。原创 2024-10-15 12:55:24 · 988 阅读 · 0 评论 -
js.数组中的第K个最大元素
思路:将数组内元素排序,返回第K大的值。使用了自带的sort方法,建议不要这样写。请注意,你需要找的是数组排序后的第。// 执行k次找出降序中的前k位。你必须设计并实现时间复杂度为。个最大的元素,而不是第。原创 2024-10-11 15:58:39 · 373 阅读 · 0 评论 -
js.重复的DNA序列
返回所有在 DNA 分子中出现不止一次的。时,识别 DNA 中的重复序列非常有用。的序列(子字符串)。由一系列核苷酸组成,缩写为。第一次尝试:(超时了)原创 2024-10-13 17:18:00 · 612 阅读 · 0 评论