- 博客(97)
- 收藏
- 关注
原创 前端工程师leetcode算法面试必备-二分搜索算法(上)
二分搜索是一种在有序数组中查找某一特定元素的搜索算法。二分搜索算法的时间复杂度为 O(log n),相比较顺序搜索的 O(n) 时间复杂度,它要快很多。例如,在一个长度为一百万的有序数组中,采用顺序搜索,最坏的情况需要执行一百万次,而二分搜索算法只需要二十次!从上图,读者可以很容易发现,二分搜索的关键就是通过目标值与中间值的比较,将搜索区间缩小一半,这也是为什么有序数组是二分搜索算法的重要前提。
2023-03-15 09:20:11
397
原创 前端工程师leetcode算法面试必备-二分搜索算法(下)
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。这种条件下,最容易想到的就是通过两重循环暴力搜索当前数字是否与后面的数字重复的方法来解决,但是这种方案的时间复杂度为 O(n^2),既然涉及到了搜索,就可以尝试通过二分搜索算法将时间复杂度降低到 O(nlogn)。除了上述二分搜索算法的处理方法之外,可能最简单暴力的方法就是通过嵌套循环找出长度最小的连续子数组,但是这种方法的时间复杂度为 O(n^2),有没有方法将其降低到 O(n) 的时间复杂度呢?
2023-03-15 09:19:08
330
原创 用javascript分类刷leetcode5.二分查找(图文视频讲解)
a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
2023-03-01 15:14:44
587
原创 用javascript分类刷leetcode5.二分查找(图文视频讲解)
a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3。解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
2023-03-01 15:13:17
429
原创 前端leetcde算法面试套路之堆
分析 – 大顶堆按照题目已经,需要取出一组数组中的最大值和次大值,进行一定运算后,会将计算值返回给数组,然后循环操作,直到数组长度最大为 1 时结束所以就是动态取极值,可以考虑用堆来处理定义一个方法 pop,每次获取堆顶元素,并将大顶堆整理好,定义方法 add 为为堆加入元素这样每一次取出两个元素,返回 1 或 0 个元素,一直到堆元素小于 2 时结束,返回堆中的元素或 0空间复杂度就是维护堆,所以是 O(N), 时间复杂度 O(NlogN)
2023-02-28 09:27:47
120
原创 前端leetcde算法面试套路之树
按照那个男人的指示,正常我们就用递归做就好,就好像我们做非排序题排序的时候,sort 一下就好了,但是一旦面试官问到用另外的迭代方式的时候,我们再套个模板,会比记住多个迭代写法要简单,毕竟内存容量有限,而后续遍历的迭代写法确实挺坑的,能省一点内存就省一点吧。要知道做前端的面试算法,考的不就是你有么得主动学习能力,抽象能力等,但是考虑到参差不齐的前端娱乐圈,考得难吧可能就全是漏网之鱼了,所以既要筛选出鱼,但是又不能难度过大,树就是那个比较适中的,所以赶紧刷起来吧朋友们;有的时候我们直接判断是否叶子节点,
2023-02-28 09:27:14
348
原创 用javascript分类刷leetcode13.单调栈(图文视频讲解)
输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。
2023-02-28 09:26:02
286
原创 前端leetcde算法面试套路之回溯
回溯,就是无脑冲,碰壁之后就回撤一步继续搞,属于一种暴力解题的思路;实际上也是如此,当我们在遇到一些分类讨论的问题,无法想到比较精妙的解决方案,我们第一时间考虑到的就是暴力枚举所有情况,然后再做处理,而回溯就是这样的一个暴力法下一个 tab 学习一下常规的排序算法吧。
2023-02-27 11:46:41
319
原创 前端leetcde算法面试套路之堆
分析 – 大顶堆按照题目已经,需要取出一组数组中的最大值和次大值,进行一定运算后,会将计算值返回给数组,然后循环操作,直到数组长度最大为 1 时结束所以就是动态取极值,可以考虑用堆来处理定义一个方法 pop,每次获取堆顶元素,并将大顶堆整理好,定义方法 add 为为堆加入元素这样每一次取出两个元素,返回 1 或 0 个元素,一直到堆元素小于 2 时结束,返回堆中的元素或 0空间复杂度就是维护堆,所以是 O(N), 时间复杂度 O(NlogN)
2023-02-27 11:45:49
257
原创 用javascript分类刷leetcode9.位运算(图文视频讲解)
在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。程序中所有的数载计算机内存中都是以二进制存储的,位运算就是直接对整数在内存中的二进制进行操作,由于直接在内存中进行操作,不需要转成十进制,因此处理速度非常快。给你一个整数 n ,对于 0
2023-02-27 11:44:48
295
原创 前端leetcde算法面试套路之二叉树
这里优先选择了 LeetCode 热题 HOT 100 中的树题,毕竟刷题的边际收益就是冲击需要算法的面试,所以 Hot 优先级更高。
2023-02-21 12:37:41
272
原创 前端leetcde算法面试套路之双指针
上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法这里主要是快慢指针和端点指针, 解决一些一次遍历搞不掂,多个指针协商干活不累的题目,基本上觉得属于一种解题上的思路,一次不行,我就两次的样子;所以刷完基础双指针,然后滑窗和二分后,这种思路在今后解题上应该会不定期能冒出来吧;所以下期学习另外一种解题思路,回溯吧;
2023-02-21 12:37:07
268
原创 用javascript分类刷leetcode22.字典树(图文视频讲解)
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]解释:“apply” 和 “apple” 都能由词典中的单词组成。输入:words = [“w”,“wo”,“wor”,“worl”, “world”]输入:words = [“w”,“wo”,“wor”,“worl”, “world”]
2023-02-21 12:36:02
525
原创 JavaScript刷LeetCode拿offer-栈相关题目
后出来的余数反而要排到前面把余数依次入栈,然后出栈,就可以实现余数倒叙输出。最后调用的函数,最先执行完JS解释器使用栈来控制函数调用的顺序栈是一个后进先出的数据结构JavaScript没有栈的结构;可以用array实现栈的功能栈常用操作:入栈 push(x);出栈 pop();最后元素 stack[stack.length - 1]
2023-02-20 13:04:39
395
原创 用javascript分类刷leetcode15.链表(图文视频讲解)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9。链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。
2023-02-20 13:04:08
469
原创 JavaScript刷LeetCode拿offer-树的遍历
一种分层数据的抽象模型。前端工作中常见的树包括:DOM树,级联选择,树形控件JS中没有树,可以用Object和Array构建树深度/广度优先遍历先中后序遍历继续对树的深度/广度优先遍历,先中后序遍历,层序遍历等遍历和递归的方法,有更深入的理解和学习。
2023-02-20 13:03:48
369
原创 前端工程师leetcode算法面试必备-简单的二叉树
本难度的题目主要考察二叉树的基本概念和操作。算法作为计算机的基础学科,用 JavaScript 刷,一点也不丢人ε=ε=ε=┏(゜ロ゜;)┛。本系列文章会分别给出一种算法的3种难度的总结篇(简单难度,中等难度以及困难难度)。在简单难度中,会介绍该算法的基本知识与实现,另外两个难度,着重讲解解题的思路。
2023-02-19 15:36:34
445
原创 用javascript分类刷leetcode17.栈(图文视频讲解)
比赛开始时,记录是空白的。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。“+” - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]输入:ops = [“5”,“-2”,“4”,“C”,“D”,“9”,“+”,“+”]
2023-02-19 15:36:24
680
4
原创 JavaScript刷LeetCode心得
写下 AC 一遍题目之后的收获。知道了方法论,做起题来轻松了不少。遇到问题多找轮子,一定有某种方法论可以用。不要耍小聪明用一些奇巧淫技,思路不对再怎么绕都是浪费时间。不要想着自己造轮子(特别是算法方面),绝大多数问题前辈一定有更好更完善的方案在。自己造轮子费时费事又没太大意义。看答案和自己做是两回事,自己动手实现了才能算是会了。算法之所以存在,就是用来适应某些场景、解决某类问题的。在对的场景选择对的算法才能体现算法的价值,不要滥用算法。
2023-02-19 15:36:02
655
原创 前端工程师leetcode算法面试必备-二叉树深度广度遍历
Medium 难度主要考察结合二叉树性质的 CRUD 操作,而这一切的基础都离不开遍历二叉树。二叉树是图的子集,因而同样适用以下两种搜索思想:**DFS(深度优先搜索):**沿着根节点递归下去,遇到叶子节点则向上回溯;**BFS (广度优先搜索):**按照二叉树的层次访问,通常采用队列保存每个层次的节点。由于二叉树本身的定义就是递归的,所以采用递归处理起来,代码更容易理解。一个函数被调用的时间和空间成本开销很大,递归太多很可能导致调用栈溢出的问题。
2023-02-14 14:34:13
1406
1
原创 用javascript分类刷leetcode22.字典树(图文视频讲解)
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]解释:“apply” 和 “apple” 都能由词典中的单词组成。输入:words = [“w”,“wo”,“wor”,“worl”, “world”]输入:words = [“w”,“wo”,“wor”,“worl”, “world”]
2023-02-14 14:33:50
144
原创 前端工程师leetcode算法面试必备-二叉树的构造和遍历
上一篇中介绍了如何采用 DFS 和 BFS 的搜索思想去实现二叉树的前序遍历、中序遍历、后序遍历以及分层遍历。根据各种遍历构造二叉树。算法作为计算机的基础学科,用 JavaScript 刷,一点也不丢人ε=ε=ε=┏(゜ロ゜;)┛。本系列文章会分别给出一种算法的3种难度的总结篇(简单难度,中等难度以及困难难度)。在简单难度中,会介绍该算法的基本知识与实现,另外两个难度,着重讲解解题的思路。
2023-02-14 14:32:19
222
原创 前端工程师leetcode算法面试必备-二分搜索算法(下)索算法(下)
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。这种条件下,最容易想到的就是通过两重循环暴力搜索当前数字是否与后面的数字重复的方法来解决,但是这种方案的时间复杂度为 O(n^2),既然涉及到了搜索,就可以尝试通过二分搜索算法将时间复杂度降低到 O(nlogn)。除了上述二分搜索算法的处理方法之外,可能最简单暴力的方法就是通过嵌套循环找出长度最小的连续子数组,但是这种方法的时间复杂度为 O(n^2),有没有方法将其降低到 O(n) 的时间复杂度呢?
2023-02-13 12:20:37
285
原创 前端工程师leetcode算法面试必备-二分搜索算法(中)
二分搜索算法本身并不是特别复杂,核心点主要集中在:指的是一个递增或者递减的区间(特殊情况如:【852. 山脉数组的峰顶索引】);用来确定搜索目标落在左半区间还是右半区间;进入 Medium 难度之后,这两个条件一般不会直接给出,需要解题者根据题目自行构造。这道题目相对比较简单,但是它与前面题目的差异在于:搜索目标不一定存在有序数组中,那么在搜索结束后,就需要注意特殊情况的处理。传送门写在最后算法作为计算机的基础学科,用 JavaScript 刷,一点也不丢人ε=ε=ε=┏(゜ロ゜;)┛。
2023-02-13 12:19:51
232
原创 前端刷完这12道滑动窗口,就可以出山面试了
经常会有人问,作为前端,你在实际工作中用到过哪些算法,之前我回答是,树和位运算,而最近在学习网络模块,发现了和前端,起码是和网络相关的一种算法,那就是滑动窗口;我们知道在 HTTP1.1 发送请求,TCP 会将请求传输到服务端,而对于 TCP 协议,最重要的能力之一就是控制流速;当发送方需要发送很多请求的时候,这些请求会阻塞在某一个缓存中等待 TCP 发送,这个后面还有源源不断的请求发起,那总不能一下子全堵在缓存上吧,会炸掉的,这个时候这个模型就是滑动窗口了绿色是发送并连接成功的。
2023-02-07 10:34:25
294
原创 用javascript分类刷leetcode16.set&map(图文视频讲解)
输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]输入:nums = [2,7,11,15], target = 9。
2023-02-07 10:34:08
357
原创 前端工程师leetcode算法面试必备-二分搜索算法(上)搜索算法(上)
二分搜索是一种在有序数组中查找某一特定元素的搜索算法。二分搜索算法的时间复杂度为 O(log n),相比较顺序搜索的 O(n) 时间复杂度,它要快很多。例如,在一个长度为一百万的有序数组中,采用顺序搜索,最坏的情况需要执行一百万次,而二分搜索算法只需要二十次!从上图,读者可以很容易发现,二分搜索的关键就是通过目标值与中间值的比较,将搜索区间缩小一半,这也是为什么有序数组是二分搜索算法的重要前提。
2023-02-07 10:33:46
325
原创 前端leetcde算法面试套路之堆
分析 – 大顶堆按照题目已经,需要取出一组数组中的最大值和次大值,进行一定运算后,会将计算值返回给数组,然后循环操作,直到数组长度最大为 1 时结束所以就是动态取极值,可以考虑用堆来处理定义一个方法 pop,每次获取堆顶元素,并将大顶堆整理好,定义方法 add 为为堆加入元素这样每一次取出两个元素,返回 1 或 0 个元素,一直到堆元素小于 2 时结束,返回堆中的元素或 0空间复杂度就是维护堆,所以是 O(N), 时间复杂度 O(NlogN)
2023-02-06 11:34:21
303
原创 用javascript分类刷leetcode21.树(图文视频讲解)
树这种数据结构包括根节点root,左右节点,子树中又有父节点,子节点,兄弟节点,没有子节点的成为叶子节点,树分为二叉树和多叉树List 就是特殊化的tree,Tree就是特殊化的Graph。
2023-02-06 11:34:06
545
原创 前端leetcde算法面试套路之树
按照那个男人的指示,正常我们就用递归做就好,就好像我们做非排序题排序的时候,sort 一下就好了,但是一旦面试官问到用另外的迭代方式的时候,我们再套个模板,会比记住多个迭代写法要简单,毕竟内存容量有限,而后续遍历的迭代写法确实挺坑的,能省一点内存就省一点吧。要知道做前端的面试算法,考的不就是你有么得主动学习能力,抽象能力等,但是考虑到参差不齐的前端娱乐圈,考得难吧可能就全是漏网之鱼了,所以既要筛选出鱼,但是又不能难度过大,树就是那个比较适中的,所以赶紧刷起来吧朋友们;有的时候我们直接判断是否叶子节点,
2023-02-06 11:33:23
260
原创 前端leetcde算法面试套路之回溯
回溯,就是无脑冲,碰壁之后就回撤一步继续搞,属于一种暴力解题的思路;实际上也是如此,当我们在遇到一些分类讨论的问题,无法想到比较精妙的解决方案,我们第一时间考虑到的就是暴力枚举所有情况,然后再做处理,而回溯就是这样的一个暴力法下一个 tab 学习一下常规的排序算法吧。
2023-01-09 09:00:17
410
原创 前端leetcde算法面试套路之堆
分析 – 大顶堆按照题目已经,需要取出一组数组中的最大值和次大值,进行一定运算后,会将计算值返回给数组,然后循环操作,直到数组长度最大为 1 时结束所以就是动态取极值,可以考虑用堆来处理定义一个方法 pop,每次获取堆顶元素,并将大顶堆整理好,定义方法 add 为为堆加入元素这样每一次取出两个元素,返回 1 或 0 个元素,一直到堆元素小于 2 时结束,返回堆中的元素或 0空间复杂度就是维护堆,所以是 O(N), 时间复杂度 O(NlogN)
2023-01-09 08:59:52
286
原创 用javascript分类刷leetcode9.位运算(图文视频讲解)
在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。程序中所有的数载计算机内存中都是以二进制存储的,位运算就是直接对整数在内存中的二进制进行操作,由于直接在内存中进行操作,不需要转成十进制,因此处理速度非常快。给你一个整数 n ,对于 0
2023-01-09 08:59:28
256
原创 用javascript分类刷leetcode17.栈(图文视频讲解)
比赛开始时,记录是空白的。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。“+” - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]输入:ops = [“5”,“-2”,“4”,“C”,“D”,“9”,“+”,“+”]
2023-01-06 08:36:31
366
原创 前端leetcde算法面试套路之二叉树
这里优先选择了 LeetCode 热题 HOT 100 中的树题,毕竟刷题的边际收益就是冲击需要算法的面试,所以 Hot 优先级更高。
2023-01-06 08:36:29
224
原创 前端leetcde算法面试套路之双指针
上一 part 刚写完二分和滑窗,他们都属于特殊的双指针方法,所以这一 part 直接汇总一下除了特殊的二分和滑窗外的其他双指针写法这里主要是快慢指针和端点指针, 解决一些一次遍历搞不掂,多个指针协商干活不累的题目,基本上觉得属于一种解题上的思路,一次不行,我就两次的样子;所以刷完基础双指针,然后滑窗和二分后,这种思路在今后解题上应该会不定期能冒出来吧;所以下期学习另外一种解题思路,回溯吧;
2023-01-06 08:35:58
375
原创 JavaScript刷LeetCode拿offer-栈相关题目
后出来的余数反而要排到前面把余数依次入栈,然后出栈,就可以实现余数倒叙输出。最后调用的函数,最先执行完JS解释器使用栈来控制函数调用的顺序栈是一个后进先出的数据结构JavaScript没有栈的结构;可以用array实现栈的功能栈常用操作:入栈 push(x);、出栈 pop();、最后元素 stack[stack.length - 1]
2023-01-05 10:44:53
251
原创 用javascript分类刷leetcode13.单调栈(图文视频讲解)
输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。
2023-01-05 10:42:39
223
原创 JavaScript刷LeetCode拿offer-树的遍历
一种分层数据的抽象模型。前端工作中常见的树包括:DOM树,级联选择,树形控件JS中没有树,可以用Object和Array构建树深度/广度优先遍历,先中后序遍历继续对树的深度/广度优先遍历,先中后序遍历,层序遍历等遍历和递归的方法,有更深入的理解和学习。
2023-01-05 10:42:01
258
原创 用javascript分类刷leetcode22.字典树(图文视频讲解)
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]解释:“apply” 和 “apple” 都能由词典中的单词组成。输入:words = [“w”,“wo”,“wor”,“worl”, “world”]输入:words = [“w”,“wo”,“wor”,“worl”, “world”]
2023-01-04 12:16:21
437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人