- 博客(78)
- 资源 (2)
- 收藏
- 关注

原创 我的前端JS算法库
分享我的JavaScript算法库,这是我工作之余,刷LeetCode积累而成。目前有400多道题解,欢迎关注。地址:https://github.com/cunzaizhuyi/js-leetcode后面,我会重温这些题,添加多种解法,以及添加注释。希望对您有所帮助。...
2019-10-05 17:21:36
807
1
原创 哈夫曼树的js实现
前言哈夫曼树是数据压缩编码算法的基础,本文使用JavaScript语言实现了该算法。算法流程:输入待编码的字符串,算法去构造哈夫曼树,从而实现对字符串的二进制压缩编码。对于哈夫曼树理论的学习,可去参见其他文章。本文仅包含实现的代码以及注释。注释比较丰富,相信不难理解。算法实现树节点既然是树数据结构,就要有树节点,下面是树节点定义class Node { construc...
2020-02-25 20:09:25
1142
原创 5-medium-最长回文串-JavaScript版
// 5 medium 最长回文串//// 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。// 示例 1:// 输入: "babad"// 输出: "bab"// 注意: "aba" 也是一个有效答案。// 示例 2:// 输入: "cbbd"// 输出: "bb"/** * @param {string} s * @ret...
2019-09-15 16:46:24
257
原创 LeetCode781-medium-森林中的兔子-JavaScript版
// 781 medium 森林中的兔子//// 森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在answers数组里。//// 返回森林中兔子的最少数量。//// 示例:// 输入: answers = [1, 1, 2]// 输出: 5// 解释:// 两只回答了 "1" 的兔子可能有相同的颜色,设为红...
2019-08-28 23:11:35
219
原创 LeetCode205-easy-同构字符串-JavaScript版
// 205 easy 同构字符串// 跟290单词规律一模一样////// 给定两个字符串s和t,判断它们是否是同构的。// 如果s中的字符可以被替换得到t,那么这两个字符串是同构的。// 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。//// 示例 1:// 输入: s = "egg", t ...
2019-08-27 08:44:59
342
原创 LeetCode136-easy-只出现一次的数字-JavaScript版
// 136 easy 只出现一次的数字// 跟540题一样的解法//// 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。//// 说明:// 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?//// 示例 1:// 输入: [2,2,1]// 输出: 1// 示例2:// 输入: [4,1,2...
2019-08-27 08:43:35
243
原创 LeetCode771-easy-宝石与石头-JavaScript版
// 771 easy 石头与宝石//// 给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。// S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。// J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。//// 示例 1:// 输入: J = "aA", S = "aAAbbb...
2019-08-27 08:41:46
153
原创 LeetCode31-easy-下一个排列-JavaScript版
// medium 31 下一个排列// 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。//// 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。//// 必须原地修改,只允许使用额外常数空间。//// 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。// 1,2,3 → 1,3,2// 3,2,1 → 1,...
2019-08-27 08:40:22
142
原创 LeetCode1-两数之和-easy-JavaScript版
// easy 1 两数之和//// 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。// 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。//// 示例:// 给定 nums = [2, 7, 11, 15], target = 9// 因为 nums[0] + nums[1...
2019-08-27 08:39:04
143
原创 LeetCode394-字符串解码-medium-JavaScript版
var decodeString = function(s) { let stack = [] for(let i = 0; i < s.length; i++){ if (stack.length === 0 || s[i] !== ']'){ if (/[0-9]/.test(s[i])){ for...
2019-08-25 17:43:03
335
原创 leetcode605-easy-种花问题-JavaScript版
// 605 easy 种花问题// 跟849题一样// 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。//// 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。//// 示...
2019-08-24 00:37:37
240
原创 LeetCode229-medium-求众数2-JavaScript版
// medium 229 求众数2//// 给定一个大小为n的数组,找出其中所有出现超过⌊ n/3 ⌋次的元素。// 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。//// 示例1:// 输入: [3,2,3]// 输出: [3]// 示例 2:// 输入: [1,1,1,3,3,2,2,2]// 输出: [1,2]/** * @pa...
2019-08-23 22:19:00
138
原创 Leetcode09-medium-长度最小的子数组-JavaScript版
// medium 209 长度最小子数组// 给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。// 如果不存在符合条件的连续子数组,返回 0。//// 示例:// 输入: s = 7, nums = [2,3,1,2,4,3]// 输出: 2// 解释: 子数组[4,3]是该条件下的长度最小的连续子数组。// 进阶...
2019-08-23 22:07:13
334
原创 LeetCode665-easy-非递减数列-JavaScript版
// 665 easy 非递减数列// 给定一个长度为n的整数数组,你的任务是判断在最多改变1 个元素的情况下,该数组能否变成一个非递减数列。// 我们是这样定义一个非递减数列的:对于数组中所有的i (1 <= i < n),满足array[i] <= array[i + 1]。//// 示例 1:// 输入: [4,2,3]// 输出: True/...
2019-08-23 18:46:33
208
原创 LeetCode849-easy-到最近的人的最大距离-JavaScript版
// 849 easy 到最近的人的最近距离// 在一排座位(seats)中,1代表有人坐在座位上,0代表座位上是空的。// 至少有一个空座位,且至少有一人坐在座位上。// 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。// 返回他到离他最近的人的最大距离。//// 示例 1:// 输入:[1,0,0,0,1,0,1]// 输出:2// 解释...
2019-08-22 22:16:49
160
原创 LeetCode1010-easy-总持续时间可被 60 整除的歌曲-JavaScript版
// 1010 easy//// 在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。// 返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字i < j 且有(time[i] + time[j]) % 60 == 0。////// 示例 1:// 输入:[30,20,150,100,40]// 输出:3// 解释:这三...
2019-08-22 21:48:28
255
原创 leetcode830-easy-较大分组的位置
// 830 easy 较大分组的位置// 在一个由小写字母构成的字符串S中,包含由一些连续的相同字符所构成的分组。// 例如,在字符串 S = "abbxxxxzyy"中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。// 我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。// 最终结果按照字典顺序输...
2019-08-22 20:50:21
133
原创 LeetCode189-easy-旋转数组-JavaScript版
// 189 easy 旋转数组//// 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。//// 示例 1:// 输入: [1,2,3,4,5,6,7] 和 k = 3// 输出: [5,6,7,1,2,3,4]// 解释:// 向右旋转 1 步: [7,1,2,3,4,5,6]// 向右旋转 2 步: [6,7,1,2,3,4,5]// 向右旋转 3...
2019-08-21 22:03:08
157
原创 LeetCode1160-easy-拼写单词-JavaScript版
// 1160 easy 拼写单词//// 给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。// 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。//// 注意:每次拼写时,chars 中的每个字母都只能用一次。// 返回词汇表words中你掌握的所有单词的 长度之...
2019-08-21 21:41:11
205
原创 LeetCode566-easy-重塑矩阵-JavaScript版
// 566 easy 重塑矩阵//// 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。// 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。// 重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。//// 如果具有给定参数的reshape操作是可行且合理的,...
2019-08-21 21:25:31
141
原创 leetcode415-easy-字符串相加
// easy 415 字符串相加//// 给定两个字符串形式的非负整数num1 和num2,计算它们的和。//// 注意://// num1 和num2的长度都小于 5100.// num1 和num2 都只包含数字0-9.// num1 和num2 都不包含任何前导零。// 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。...
2019-08-20 22:32:26
154
原创 LeetCode167-两数之和2-有序数组-JavaScript版
// 167 easy 两数之和-输入有序数组//// 给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。// 函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。//// 说明:// 返回的下标值(index1 和 index2)不是从零开始的。// 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用...
2019-08-20 21:03:06
154
原创 leetcode-888-easy-公平的交换糖果
// easy 888 公平的糖果交换//// 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i块糖的大小,B[j] 是鲍勃拥有的第 j块糖的大小。// 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)// 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,a...
2019-08-19 22:42:27
196
原创 leetcode-661-easy-图片平滑器
// 661 easy 图片平滑器//// 包含整数的二维矩阵 M 表示一个图片的灰度。你需要设计一个平滑器来让每一个单元的灰度成为平均灰度(向下舍入) ,平均灰度的计算是周围的8个单元和它本身的值求平均,如果周围的单元格不足八个,则尽可能多的利用它们。//// 示例 1:// 输入:// [[1,1,1],// [1,0,1],// [1,1,1]]...
2019-08-19 22:07:22
169
原创 LeetCode540-medium-有序数组中的单一元素-JavaScript版
// 540 medium 有序数组中的单一元素//// 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。//// 示例 1://// 输入: [1,1,2,3,3,4,4,8,8]// 输出: 2// 示例 2://// 输入: [3,3,7,7,10,11,11]// 输出: 10// 注意: 您的方案应该在 O(log n)时...
2019-08-19 21:05:21
156
原创 LeetCode80-medium-删除排序数组中的重复项2-JavaScript版
// 80 medium 删除排序数组中的重复项//// 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。// 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。//// 示例1:// 给定 nums = [1,1,1,2,2,3],// 函数应返回新长度 length = 5, 并且原数...
2019-08-18 20:08:37
135
原创 LeetCode289-medium-生命游戏-JavaScript版
// 289 medium 生命游戏//// 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。// 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。// 每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律://...
2019-08-18 15:06:28
214
原创 LeetCode1089-easy-复写0-JavaScript版
// 1089 easy 复写0// 给你一个长度固定的整数数组arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。// 注意:请不要在超过该数组长度的位置写入元素。// 要求:请对输入的数组就地进行上述修改,不要从函数返回任何东西。////// 示例 1:// 输入:[1,0,2,3,0,4,5,0]// 输出:null// 解释:调用函数后,输入的...
2019-08-18 10:44:47
209
原创 leetcode169-求众数-JavaScript版
// easy 求众数 169// 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。//// 你可以假设数组是非空的,并且给定的数组总是存在众数。//// 示例1:// 输入: [3,2,3]// 输出: 3// 示例2:// 输入: [2,2,1,1,1,2,2]// 输出: 2/** * @param {nu...
2019-08-18 02:03:03
188
原创 leetcode274-h指数-medium-JavaScript版
// 274 medium H指数//// 给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h指数。// h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的N - h篇论文每篇被引用次数不多于 h 次。)”/...
2019-08-16 21:05:00
146
原创 LeetCode75-medium-颜色分类-JavaScript版
// 75 medium 颜色分类//// 给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。// 此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。//// 注意:// 不能使用代码库中的排序函数来解决这道题。//// 示例:// 输入: [2,0,2,1,1,0]// 输出: ...
2019-08-14 23:20:24
163
原创 leetcode367-有效的完全平方数-JavaScript版
// 367 easy 有效的完全平方数// 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。// 说明:不要使用任何内置的库函数,如 sqrt。//// 示例 1:// 输入:16// 输出:True// 示例 2:// 输入:14// 输出:False/** * @param {number} num...
2019-08-14 00:17:42
273
原创 LeetCode836-矩形重叠-JavaScript版
// 836 easy 矩形重叠//// 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。//// 如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。//// 给出两个矩形,判断它们是否重叠并返回结果。//// 示例 1:// 输入:rec1 = [0,0,2...
2019-08-13 23:40:40
161
原创 leetcode67-easy-二进制求和-JavaScript版
// 67 easy 二进制求和// 给定两个二进制字符串,返回他们的和(用二进制表示)。// 输入为非空字符串且只包含数字1和0。//// 示例1:// 输入: a = "11", b = "1"// 输出: "100"// 示例2:// 输入: a = "1010", b = "1011"// 输出: "10101"/** * @param {stri...
2019-08-13 19:35:18
283
原创 LeetCode-202-快乐数-JavaScript版
// 202 easy 快乐数// 编写一个算法来判断一个数是不是“快乐数”。// 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,// 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。//// 示例:// 输入: 19// 输出: true// 解释:// 12 + 92 =...
2019-08-11 20:47:52
258
原创 LeetCode171-Excel表序列号-JavaScript版
给定一个Excel表格中的列名称,返回其相应的列序号。例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例 1:输入: "A"输出: 1示例2:输入: "AB"输出: 28/** *...
2019-08-11 19:54:35
305
原创 leetcode728-自除数-JavaScript版
// 728 easy 自除数// 自除数是指可以被它包含的每一位数除尽的数。// 例如,128 是一个自除数,因为128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。// 还有,自除数不允许包含 0 。// 给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。//// 示例 1:// 输入:// 上边界left = 1...
2019-08-11 18:19:30
197
原创 LeetCode223-矩形面积-JavaScript版
// 223 medium 矩形面积// 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。// 每个矩形由其左下顶点和右上顶点坐标表示,如图所示。// 示例:// 输入: -3, 0, 3, 4, 0, -1, 9, 2// 输出: 45// 说明: 假设矩形面积不会超出 int 的范围。var computeArea = function(x1, y1, x2, ...
2019-08-11 11:21:21
295
原创 leetcode-539-最小时间差-JavaScript版
// 539-medium-最小时间差// 给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。//// 示例 1:// 输入: ["23:59","00:00"]// 输出: 1//// 备注:// 列表中时间数在 2~20000 之间。// 每个时间取值在 00:00~23:59 之间。/** * @param {s...
2019-08-11 08:29:52
276
几种计算机自动注记等值线图算法的探讨
2014-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人