自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

露西西⭐的博客

一只努力学习前端,坚持刷题,坚持创作的LuckyMonkey⭐

  • 博客(77)
  • 收藏
  • 关注

原创 js.39. 组合总和

摘要:该问题要求在无重复元素的整数数组candidates中找出所有和为target的组合,允许重复使用同一元素。采用回溯算法,通过递归遍历候选数字,当剩余目标值减为0时记录有效组合。示例展示了输入[2,3,6,7]和target=7时输出[[2,2,3],[7]]。解题关键是在递归过程中维护当前组合状态,并通过剪枝(当候选数大于剩余目标值时跳过)优化搜索效率。两种解法都体现了回溯思想,区别在于参数处理和递归调用方式。

2025-12-18 17:54:49 189

原创 js.207.课程表

摘要:该算法解决课程安排问题,判断是否能完成所有课程。使用拓扑排序思想,统计每门课程的入度(先修课程数),将入度为0的课程加入队列。依次处理队列中的课程,减少后续课程的入度,若入度降为0则入队。最终若能处理完所有课程则返回true,否则返回false。时间复杂度为O(n+m),其中n为课程数,m为先修关系数。示例1可以完成,示例2因存在循环依赖而无法完成。

2025-12-17 16:57:02 613

原创 js.994. 腐烂的橘子

【摘要】该题目要求计算网格中所有新鲜橘子腐烂所需的最短时间。使用BFS算法,初始时将腐烂橘子位置存入队列,每分钟处理当前队列中的所有橘子,将其四周的新鲜橘子腐烂并入队。最终检查是否所有新鲜橘子都被腐烂,若存在剩余则返回-1。时间复杂度O(mn),空间复杂度O(mn)。关键点在于正确处理边界条件和全0网格的特殊情况。

2025-12-11 13:33:35 274

原创 js.169多数元素

本文介绍了两种求解数组中多数元素的算法。题目要求找出出现次数超过n/2次的元素。第一种方法使用哈希表记录元素出现次数,时间复杂度O(n),空间复杂度O(n)。第二种更优解法是Boyer-Moore投票算法,通过维护候选元素和计数器,在一次遍历中找出多数元素,时间复杂度O(n),空间复杂度O(1)。投票算法利用了多数元素数量优势的特性,当计数器归零时更新候选元素,最终返回的候选即为多数元素。两种方法都能正确解决问题,但投票算法在空间复杂度上更优。

2025-11-28 15:00:20 285

原创 js.543二叉树的直径

本文介绍了一种计算二叉树直径的算法。二叉树的直径定义为任意两节点间最长路径的边数。算法采用深度优先搜索(DFS)递归计算每个节点的左右子树最大深度,并在遍历过程中更新全局最大值maxlen。具体实现时,对每个节点计算其左右子树深度之和,并与maxlen比较取较大值。时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。示例代码展示了JavaScript实现,通过后序遍历统计各节点左右子树深度并维护全局最大值。

2025-11-26 17:03:15 282

原创 js.238除自身以外数组的乘积

该题目要求计算数组中每个元素除自身外其他元素的乘积,且不能使用除法。解法采用左右乘积数组的策略:首先从左到右遍历构建左乘积数组left,记录每个元素左边所有元素的乘积;再从右到左构建右乘积数组right。最终结果answer[i]即为left[i-1](左边乘积)与right[len-2-i](右边乘积)的乘积。时间复杂度O(n),空间复杂度O(n),满足题目要求。示例输入[1,2,3,4]的输出为[24,12,8,6],即每个位置等于其余三个数的乘积。

2025-11-20 17:33:37 213

原创 js.112路径总和

LeetCode 112题要求判断二叉树中是否存在从根节点到叶子节点的路径,其节点值之和等于给定目标值。该题采用递归解法:若当前节点为空返回false;若为叶子节点则比较节点值与目标值是否相等;否则递归检查左右子树,目标值减去当前节点值。时间复杂度O(n),空间复杂度O(h),h为树高。示例显示当存在路径5→4→11→2时返回true,否则如空树或路径和不等时返回false。

2025-10-09 15:19:33 335

原创 js.77组合

这道题目要求生成从1到n中所有可能的k个数的组合。使用回溯算法,通过递归遍历每个可能的数字,当k=1时将当前组合加入结果。例如n=4,k=2时,会生成所有2个数字的组合。算法时间复杂度为O(C(n,k)),空间复杂度为O(k)。关键点在于递归时固定当前数字,再处理剩余数字的组合问题。

2025-09-17 19:32:40 164

原创 js.22括号生成

这是一道生成所有有效括号组合的回溯算法题。给定数字n,需要生成n对有效括号的所有可能组合。解题思路是使用递归回溯,通过维护左右括号的数量(left和right)来确保有效性:当左括号数量小于n时可以添加左括号;当右括号数量小于左括号时可以添加右括号。当右括号数量达到n时,将当前组合加入结果数组。算法时间复杂度为O(4^n/√n),空间复杂度为O(n)用于存储递归调用栈。示例输入n=3时输出5种有效组合,n=1时输出1种组合。

2025-09-12 16:00:26 260

原创 js.最小栈

题目要求实现一个能在常数时间内获取最小值的栈结构。初始解法使用单数组存储元素,getMin()需要遍历数组导致O(n)时间复杂度。优化解法采用双栈:主栈x_stack存储元素,辅助栈min_stack同步存储当前最小值。每次push操作时,min_stack添加当前值与栈顶的较小值;pop操作同步弹出两栈元素。这样getMin()只需返回min_stack栈顶元素,实现O(1)时间复杂度的最小元素查询。关键点在于通过辅助栈维护动态最小值,以空间换时间优化查询效率。

2025-09-12 11:31:17 217

原创 js.228汇总区间

题目要求将有序无重复整数数组转换为最小有序区间范围列表。解题思路是遍历数组,用left和right指针标记连续区间的起止索引。当遇到不连续元素时,根据left和right是否相等判断是单个值还是区间,并生成相应格式的字符串存入结果数组。时间复杂度为O(n),空间复杂度为O(1)(不考虑输出空间)。关键点在于正确处理连续区间判断和边界条件。

2025-09-11 19:43:05 254

原创 js.209长度最小的子数组

《最小长度子数组和》摘要:给定正整数数组和target,寻找和≥target的最短连续子数组长度。使用滑动窗口法,初始化左右指针为0,动态调整窗口大小:当和≥target时左移左指针缩小窗口,否则右移右指针扩大窗口。记录最小窗口长度,若无满足条件的子数组返回0。时间复杂度O(n),空间复杂度O(1)。示例:[2,3,1,2,4,3]中满足和≥7的最短子数组[4,3]长度为2。

2025-09-09 16:32:47 202

原创 js. 删除有序数组中的重复项and两数之和

文章摘要:本文解析了两道LeetCode算法题。第一题是删除有序数组中的重复项II,要求保留最多两次重复元素,介绍了使用Map计数和双指针两种解法。第二题是两数之和II,针对有序数组寻找和等于目标值的两个数,给出了双指针解法,通过前后指针动态调整位置来匹配目标值。两道题目都利用了数组有序的特性,提供了时间复杂度为O(n)的优化方案,并附有JavaScript实现代码。

2025-09-09 15:31:21 906

原创 对称二叉树

层次遍历,判断每一层的数据是否是对称的。给你一个二叉树的根节点。, 检查它是否轴对称。

2025-08-25 17:01:28 300

原创 js.53最大子数组和

题目要求寻找数组中连续子数组的最大和。采用动态规划方法,使用二维数组arr记录状态:arr[i][0]表示包含nums[i]的最大子数组和,arr[i][1]表示前i个元素的最大子数组和。初始化arr[0]为[nums[0], nums[0]],遍历数组时比较当前元素与之前子数组和的组合,更新状态数组。最终返回arr最后一个元素的第二个值,即为全局最大子数组和。该方法时间复杂度O(n),空间复杂度O(n),主要解决最大连续子序列求和问题。

2025-07-07 16:15:40 215

原创 js.56合并区间

本文介绍了合并重叠区间问题的解法。首先将区间按左端点排序,然后遍历区间数组,比较相邻区间:若前区间的右端点小于后区间的左端点则不合并;否则合并并更新后区间的范围。最后将处理后的区间存入结果数组。算法时间复杂度主要由排序决定,为O(nlogn),空间复杂度O(n)。示例代码展示了JavaScript实现,通过排序和一次遍历高效解决问题。该方法确保结果覆盖所有输入区间且无重叠。

2025-07-07 15:02:16 475

原创 js.42接雨水

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。可以想象一下,给每个黑方块加上左右区间,每个重合的区间会接到雨水。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

2025-06-27 16:19:13 337

原创 js.11盛最多水的容器

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。从两个端点慢慢往里面进行计算面积,去最大值。高取决于两端更小的一端。使用双指针来解这一题,我们需要求能得到的最大面积。时间复杂度:O(n),空间复杂度:O(1)轴共同构成的容器可以容纳最多的水。每次让更短一端的边 往中间移动。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。

2025-06-16 22:43:20 205

原创 js.24两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。每找到两个节点就交换位置,这里需要注意left是否是头节点的情况,交换完位置后重新记录center和right的值。用left记录两个节点的前一个节点,用center记录第一个节点,用right记录第二个节点。

2025-04-23 10:19:15 378

原创 js.全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

2025-04-16 14:14:19 315

原创 js.最长回文子串

给你一个字符串 s,找到 s 中最长的 回文 子串。

2025-04-16 08:55:23 350

原创 算法讲解——动态规划

动态规划(Dynamic Programming, DP)是一种解决复杂问题的算法思想,它将大问题分解为小问题,通过存储和重用子问题的解来避免重复计算,从而提高效率。

2025-03-27 16:23:37 624

原创 算法讲解——滑动窗口

滑动窗口是一种用于处理数组/字符串子区间问题的高效算法技巧,通过维护一个动态的窗口(通常是连续的区间),在遍历数据时调整窗口的左右边界,避免重复计算,从而将时间复杂度优化至 O(n)。

2025-03-25 15:51:24 1094

原创 算法讲解——双指针算法(js示例代码)

同向双指针:两个指针从同一侧开始移动,通常用于滑动窗口或链表操作。对向双指针:两个指针从两侧向中间移动,通常用于有序数组的搜索或判断问题。快慢双指针:两个指针以不同速度移动,通常用于链表中的环检测或中点查找。

2025-03-21 16:13:52 581

原创 前端常见面试题(不断更新版)

降低请求量:合并资源、压缩文件、使用 WebP、懒加载。加快请求速度:预解析 DNS、减少域名、使用 CDN。缓存:HTTP 缓存、离线缓存、localStorage。渲染:优化 JS/CSS、服务端渲染、利用 HTTP/2。

2025-03-21 11:25:59 1778

原创 JavaScript 中 Set 和 Map 的详细讲解

Set具有唯一性、无序性、可迭代。Set 可以存储任意类型的值(包括基本类型和引用类型)。Map是键值对存储,Map 的键可以是任意类型(包括对象、函数等),Map 会记住键值对的插入顺序,Map 在频繁增删键值对的场景下性能更好。

2025-03-20 16:28:00 2494

原创 js.128最长连续序列

算法:讲的太好啦~~

2025-03-20 14:24:17 352

原创 算法讲解——贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(局部最优)的选择,从而希望导致全局最优解的算法策略。贪心算法的核心思想是“贪心选择”,即通过局部最优解逐步构建全局最优解。

2025-03-18 15:22:30 2555

原创 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 160

原创 vue中常见面试题(会不断更新版)

vue中 key 值的作用,$route和$router的区别,路由的两种模式,v-if和v-show的区别,vue.extend和vue.component

2025-03-14 17:55:12 1145

原创 SCSS预处理器(详细讲解、入门教程)

Sass通过引入变量、嵌套规则、混入(Mixins)、继承等特性,允许开发者编写更简洁、更有组织的CSS代码。这些特性有助于减少代码重复,提高开发效率,并使得样式表更加易于维护。Sass最终会编译成合法的CSS代码,供浏览器使用。

2025-03-07 23:57:34 1211

原创 前端实现权限管理的详细方案(动态路由、接口鉴权、UI 控制 )

核心流程:用户登录 → 获取权限 → 动态生成路由 → 控制 UI 元素。安全原则:前端控制用户体验,后端兜底校验。优化方向:减少请求次数、按需加载权限、Token 短期有效。通过 RBAC 模型,可以实现灵活的权限管理,适用于复杂的企业级应用。实际开发中需结合具体业务场景调整方案。项目中,尤其是管理后台必不可少的一个环节就是权限设计。通常一个系统下的不同用户会对应不同的角色,不同角色会对应不同的组织。

2025-03-07 19:05:34 2785

原创 JavaScript 中数组的所有常用方法(作用、使用方法、细节)

作用:在数组末尾添加一个或多个元素。是否修改原数组:是。1.2 作用:删除数组的最后一个元素。是否修改原数组:是。1.3 作用:在数组开头添加一个或多个元素。是否修改原数组:是。1.4 作用:删除数组的第一个元素。是否修改原数组:是。2. 数组操作2.1 作用:合并两个或多个数组。是否修改原数组:否。作用:从数组中提取一部分。是否修改原数组:否。作用:添加或删除数组中的元素。是否修改原数组:是。作用:将数组中的一部分复

2025-03-06 14:27:53 1242

原创 生命周期总结(uni-app、vue2、vue3生命周期讲解)

的生命周期基本一致,但 Vue3 引入了 Composition API,部分钩子函数名称变化,并新增了一些钩子。

2025-03-05 17:21:16 2088

原创 js.316去除重复字母

2,该元素小于栈顶元素,如果此时栈顶元素是最大下标说明后面没有这个字母了,不进行操作,直接让该元素入栈,退出循环。如果此时栈顶元素不是最大下标,说明后面还会有这个字母,将栈顶元素出栈,继续循环判断新的栈顶元素是不是最大下标。解释为什么栈中已经有该元素直接跳过:如果栈中有该元素,那么栈顶元素一定大于或者等于该元素,使用单调栈的思路,明白一个道理,尽最大可能把最小的放在前面,所以优先最小的元素。,请你去除字符串中重复的字母,使得每个字母只出现一次。1,该元素大于栈顶元素,直接入栈。如果是空栈,直接入栈。

2025-03-03 20:10:00 351

原创 js.324摆动排序 II

1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。你可以假设所有输入数组都可以得到满足题目要求的结果。先将nums进行降序排序,n为要循环的次数。

2025-02-28 18:31:07 277

原创 js.字符串解码

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。使用递归和栈的思路,就可以将题目解出来。有一个情况需要考虑,就是数字可能不止一位数的情况。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,表示其中方括号内部的。

2025-02-18 15:51:53 355

原创 js.字典序排数

使用dfs深度优先搜索,从1开始进行搜索,每次搜索的当前值是cur*10+i。同时,如果当前搜到的数字的长度和n的长度一样,也不用继续搜索了。条件是如果搜到的当前值大于n,就截止。你必须设计一个时间复杂度为。

2025-02-17 16:02:29 193

原创 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 473

原创 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 245

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除