JavaScript-Algorithms icon indicating copy to clipboard operation
JavaScript-Algorithms copied to clipboard

基础理论+JS框架应用+实践,从0到1构建整个前端算法体系

Results 112 JavaScript-Algorithms issues
Sort by recently updated
recently updated
newest added

### 引言 链表相对于数组来说,要复杂的多,首先,链表不需要连续的内存空间,它是由一组零散的内存块透过指针连接而成,所以,每一个块中必须包含当前节点内容以及后继指针。最常见的链表类型有单链表、双链表以及循环链表。 学习链表最重要的是 **多画图多练习** ,没有捷径可循,在遇到链表问题时,瓶子君总结了一下,可以按照以下五步骤: - 确定解题的数据结构:单链表、双链表或循环链表等 - 确定解题思路:如何解决问题 - 画图实现:画图可以帮助我们发现思维中的漏洞(一些思路不周的情况) - 确定边界条件:思考解题中是否有边界问题以及如何解决 - 代码实现:解题完成✅ 本文会给常用链表(单链表、双链表以及循环链表)的基本操作已经代码实现,并给出实现思路,这些都是链表解题的基石,请务必掌握!⛽️⛽️⛽️ 最后附赠一道 leetcode 题目,并按照链表解题五步骤给出答案! 下面开始本节的学习吧!!!👇👇👇 ### 一、单链表 ![img](https://cdn.nlark.com/yuque/0/2020/png/273506/1584189445334-d657b077-72b3-4d95-8adb-d918b6543557.png) 单链表结构: ```js function List () {...

LeetCode
文章

![](http://resource.muyiy.cn/image/20200401230346.jpg) ### 简介 数组、链表、栈、队列都是线性表,它表示的结构都是一段线性的结构,与之对应的就是非线性表,例如树、图、堆等,它表示的结构都非线性。 本节主要介绍 JavaScript 数组,在开始本章节前,思考一个问题: 我们知道在 JavaScript 中,可以在数组中保存不同类型值,并且数组可以动态增长,不像其它语言,例如 C,创建的时候要决定数组的大小,如果数组满了,就要重新申请内存空间。这是为什么喃? 本节从 Chrome v8 源码角度回答这个问题,分为四个方面: - 数组基础入门 - JavaScript 中,数组为什么可以保存不同类型? - JavaScript 中,数组是如何存储的喃? - JavaScript 中,数组的动态扩容与减容( `FastElements` ) 下面进入正题吧!(文末有惊喜)😊 想要更多更快的学习本系列,可以关注公众号「前端瓶子君」和我的「[Github(点击查看)](https://github.com/sisterAn/JavaScript-Algorithms)」...

文章
源码

给定一个字符串,请你找出其中不含有重复字符的 **最长子串** 的长度。 **示例 1:** ```js 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 ``` **示例 2:** ```js 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 ``` **示例 3:** ```js...

LeetCode
字节

珂珂喜欢吃香蕉。这里有 `N` 堆香蕉,第 `i` 堆中有 `piles[i]` 根香蕉。警卫已经离开了,将在 `H` 小时后回来。 珂珂可以决定她吃香蕉的速度 `K` (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 `K` 根。如果这堆香蕉少于 `K` 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。 返回她可以在 `H` 小时内吃掉所有香蕉的最小速度 `K`(K 为整数)。 **示例 1:** ``` 输入: piles = [3,6,7,11], H...

腾讯
LeetCode

##### V16.3 之前 我们可以将生命周期分为三个阶段: - 挂载阶段 - 组件更新阶段 - 卸载阶段 分开来讲: 1. 挂载阶段 - `constructor`:避免将 props 的值复制给 state - `componentWillMount` - `render`:react 最重要的步骤,创建虚拟 dom,进行 diff 算法,更新 dom 树都在此进行 - `componentDidMount`...

快手

设计一个支持在平均 时间复杂度 **O(1)** 下,执行以下操作的数据结构。 - `insert(val)` :当元素 val 不存在时,向集合中插入该项。 - `remove(val)` :元素 val 存在时,从集合中移除该项。 - `getRandom` :随机返回现有集合中的一项。每个元素应该有 **相同的概率** 被返回。 **示例 :** ```js // 初始化一个空的集合。 RandomizedSet randomSet = new RandomizedSet(); //...

LeetCode
字节

给定一个数组 `nums` 和滑动窗口的大小 `k`,请找出所有滑动窗口里的最大值。 **示例:** ```js 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] ``` **解释:** > 滑动窗口的位置 最大值 > > [1 3 -1] -3 5 3 6...

LeetCode
剑指Offer

```js 输入:"abbbaca" 输出:"ca" 解释:"abbbaca" => "aaca"=>"ca" ```

字节

给你一个字符串 s,「`k` 倍重复项删除操作」将会从 `s` 中选择 `k` 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。 你需要对 `s` 重复进行无限次这样的删除操作,直到无法继续为止。 在执行完所有删除操作后,返回最终得到的字符串。 本题答案保证唯一。 **示例 1:** ```js 输入:s = "abcd", k = 2 输出:"abcd" 解释:没有要删除的内容。 ``` **示例 2:** ```js 输入:s = "deeedbbcccbdaa",...

LeetCode