LeetCode
林飞叶
we前端开发者
展开
-
哈夫曼树的js实现
前言哈夫曼树是数据压缩编码算法的基础,本文使用JavaScript语言实现了该算法。算法流程:输入待编码的字符串,算法去构造哈夫曼树,从而实现对字符串的二进制压缩编码。对于哈夫曼树理论的学习,可去参见其他文章。本文仅包含实现的代码以及注释。注释比较丰富,相信不难理解。算法实现树节点既然是树数据结构,就要有树节点,下面是树节点定义class Node { construc...原创 2020-02-25 20:09:25 · 1051 阅读 · 0 评论 -
LeetCode566-easy-重塑矩阵-JavaScript版
// 566 easy 重塑矩阵//// 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。// 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。// 重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。//// 如果具有给定参数的reshape操作是可行且合理的,...原创 2019-08-21 21:25:31 · 115 阅读 · 0 评论 -
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 · 301 阅读 · 0 评论 -
leetcode415-easy-字符串相加
// easy 415 字符串相加//// 给定两个字符串形式的非负整数num1 和num2,计算它们的和。//// 注意://// num1 和num2的长度都小于 5100.// num1 和num2 都只包含数字0-9.// num1 和num2 都不包含任何前导零。// 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。...原创 2019-08-20 22:32:26 · 128 阅读 · 0 评论 -
LeetCode167-两数之和2-有序数组-JavaScript版
// 167 easy 两数之和-输入有序数组//// 给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。// 函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。//// 说明:// 返回的下标值(index1 和 index2)不是从零开始的。// 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用...原创 2019-08-20 21:03:06 · 126 阅读 · 0 评论 -
LeetCode-202-快乐数-JavaScript版
// 202 easy 快乐数// 编写一个算法来判断一个数是不是“快乐数”。// 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,// 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。//// 示例:// 输入: 19// 输出: true// 解释:// 12 + 92 =...原创 2019-08-11 20:47:52 · 230 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
leetcode728-自除数-JavaScript版
// 728 easy 自除数// 自除数是指可以被它包含的每一位数除尽的数。// 例如,128 是一个自除数,因为128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。// 还有,自除数不允许包含 0 。// 给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。//// 示例 1:// 输入:// 上边界left = 1...原创 2019-08-11 18:19:30 · 171 阅读 · 0 评论 -
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 · 271 阅读 · 0 评论 -
leetcode605-easy-种花问题-JavaScript版
// 605 easy 种花问题// 跟849题一样// 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。//// 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。//// 示...原创 2019-08-24 00:37:37 · 198 阅读 · 0 评论 -
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 · 254 阅读 · 0 评论 -
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 · 116 阅读 · 0 评论 -
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 · 302 阅读 · 0 评论 -
LeetCode75-medium-颜色分类-JavaScript版
// 75 medium 颜色分类//// 给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。// 此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。//// 注意:// 不能使用代码库中的排序函数来解决这道题。//// 示例:// 输入: [2,0,2,1,1,0]// 输出: ...原创 2019-08-14 23:20:24 · 135 阅读 · 0 评论 -
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 · 183 阅读 · 0 评论 -
LeetCode1160-easy-拼写单词-JavaScript版
// 1160 easy 拼写单词//// 给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。// 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。//// 注意:每次拼写时,chars 中的每个字母都只能用一次。// 返回词汇表words中你掌握的所有单词的 长度之...原创 2019-08-21 21:41:11 · 177 阅读 · 0 评论 -
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 · 130 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
我的前端JS算法库
分享我的JavaScript算法库,这是我工作之余,刷LeetCode积累而成。目前有400多道题解,欢迎关注。地址:https://github.com/cunzaizhuyi/js-leetcode后面,我会重温这些题,添加多种解法,以及添加注释。希望对您有所帮助。...原创 2019-10-05 17:21:36 · 761 阅读 · 1 评论 -
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 · 227 阅读 · 0 评论 -
LeetCode781-medium-森林中的兔子-JavaScript版
// 781 medium 森林中的兔子//// 森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在answers数组里。//// 返回森林中兔子的最少数量。//// 示例:// 输入: answers = [1, 1, 2]// 输出: 5// 解释:// 两只回答了 "1" 的兔子可能有相同的颜色,设为红...原创 2019-08-28 23:11:35 · 191 阅读 · 0 评论 -
LeetCode205-easy-同构字符串-JavaScript版
// 205 easy 同构字符串// 跟290单词规律一模一样////// 给定两个字符串s和t,判断它们是否是同构的。// 如果s中的字符可以被替换得到t,那么这两个字符串是同构的。// 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。//// 示例 1:// 输入: s = "egg", t ...原创 2019-08-27 08:44:59 · 311 阅读 · 0 评论 -
LeetCode136-easy-只出现一次的数字-JavaScript版
// 136 easy 只出现一次的数字// 跟540题一样的解法//// 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。//// 说明:// 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?//// 示例 1:// 输入: [2,2,1]// 输出: 1// 示例2:// 输入: [4,1,2...原创 2019-08-27 08:43:35 · 208 阅读 · 0 评论 -
LeetCode771-easy-宝石与石头-JavaScript版
// 771 easy 石头与宝石//// 给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。// S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。// J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。//// 示例 1:// 输入: J = "aA", S = "aAAbbb...原创 2019-08-27 08:41:46 · 128 阅读 · 0 评论 -
LeetCode31-easy-下一个排列-JavaScript版
// medium 31 下一个排列// 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。//// 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。//// 必须原地修改,只允许使用额外常数空间。//// 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。// 1,2,3 → 1,3,2// 3,2,1 → 1,...原创 2019-08-27 08:40:22 · 123 阅读 · 0 评论 -
LeetCode1-两数之和-easy-JavaScript版
// easy 1 两数之和//// 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。// 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。//// 示例:// 给定 nums = [2, 7, 11, 15], target = 9// 因为 nums[0] + nums[1...原创 2019-08-27 08:39:04 · 122 阅读 · 0 评论 -
LeetCode849-easy-到最近的人的最大距离-JavaScript版
// 849 easy 到最近的人的最近距离// 在一排座位(seats)中,1代表有人坐在座位上,0代表座位上是空的。// 至少有一个空座位,且至少有一人坐在座位上。// 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。// 返回他到离他最近的人的最大距离。//// 示例 1:// 输入:[1,0,0,0,1,0,1]// 输出:2// 解释...原创 2019-08-22 22:16:49 · 133 阅读 · 0 评论 -
LeetCode289-medium-生命游戏-JavaScript版
// 289 medium 生命游戏//// 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。// 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。// 每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律://...原创 2019-08-18 15:06:28 · 195 阅读 · 0 评论 -
LeetCode1089-easy-复写0-JavaScript版
// 1089 easy 复写0// 给你一个长度固定的整数数组arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。// 注意:请不要在超过该数组长度的位置写入元素。// 要求:请对输入的数组就地进行上述修改,不要从函数返回任何东西。////// 示例 1:// 输入:[1,0,2,3,0,4,5,0]// 输出:null// 解释:调用函数后,输入的...原创 2019-08-18 10:44:47 · 171 阅读 · 0 评论 -
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 · 222 阅读 · 0 评论 -
leetcode830-easy-较大分组的位置
// 830 easy 较大分组的位置// 在一个由小写字母构成的字符串S中,包含由一些连续的相同字符所构成的分组。// 例如,在字符串 S = "abbxxxxzyy"中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。// 我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。// 最终结果按照字典顺序输...原创 2019-08-22 20:50:21 · 105 阅读 · 0 评论 -
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 · 151 阅读 · 0 评论 -
leetcode-917-仅仅反转字母-JavaScript版
// 917 easy 仅仅反转字母//// 给定一个字符串S,返回“反转后的”字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。//// 示例 1:// 输入:"ab-cd"// 输出:"dc-ba"// 示例 2:// 输入:"a-bC-dEf-ghIj"// 输出:"j-Ih-gfE-dCba"// 示例 3:// 输入:"Test1ng-L...原创 2019-08-10 18:24:21 · 156 阅读 · 0 评论 -
leetcode-520-检测大写字母-JavaScript版
// 520 easy 检测大写字母//// 给定一个单词,你需要判断单词的大写使用是否正确。// 我们定义,在以下情况时,单词的大写用法是正确的://// 全部字母都是大写,比如"USA"。// 单词中所有字母都不是大写,比如"leetcode"。// 如果单词不只含有一个字母,只有首字母大写,比如"Google"。// 否则,我们定义这个单词没有正确使用大写字母。//...原创 2019-08-10 17:47:37 · 147 阅读 · 0 评论 -
leetcode-888-easy-公平的交换糖果
// easy 888 公平的糖果交换//// 爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i块糖的大小,B[j] 是鲍勃拥有的第 j块糖的大小。// 因为他们是朋友,所以他们想交换一个糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)// 返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,a...原创 2019-08-19 22:42:27 · 165 阅读 · 0 评论 -
LeetCode66-加1-JavaScript版
// 定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。// 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。// 你可以假设除了整数 0 之外,这个整数不会以零开头。//// 示例1:// 输入: [1,2,3]// 输出: [1,2,4]// 解释: 输入数组表示数字 123。// 示例2:// 输入: [4,3,2,1]// 输出: [4...原创 2019-08-06 07:10:48 · 102 阅读 · 0 评论 -
LeetCode867-转置矩阵-JavaScript版
// 867 --easy --转置矩阵// 给定一个矩阵A,返回A的转置矩阵。// 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。//// 示例 1:// 输入:[[1,2,3],[4,5,6],[7,8,9]]// 输出:[[1,4,7],[2,5,8],[3,6,9]]// 示例 2:// 输入:[[1,2,3],[4,5,6]]// 输出:[...原创 2019-08-08 08:33:43 · 105 阅读 · 0 评论 -
leetCode88-合并两个有序数组-JavaScript版
//88 easy 合并两个有序数组// 给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。//// 说明:// 初始化nums1 和 nums2 的元素数量分别为m 和 n。// 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。// 示例:// 输...原创 2019-08-07 23:59:04 · 186 阅读 · 0 评论 -
LeetCode485-最大连续1的个数-JavaScript版
// 最大连续1的个数 485 easy// 给定一个二进制数组, 计算其中最大连续1的个数。//// 示例 1:// 输入: [1,1,0,1,1,1]// 输出: 3// 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.// 注意:// 输入的数组只包含0 和1。// 输入数组的长度是正整数,且不超过 10,000。/** * @para...原创 2019-08-04 16:16:22 · 180 阅读 · 0 评论 -
LeetCode697-数组的度-JavaScript版
//697. 数组的度 easy// 给定一个非空且只包含非负数的整数数组nums, 数组的度的定义是指数组里任一元素出现频数的最大值。// 你的任务是找到与nums拥有相同大小的度的最短连续子数组,返回其长度。//// 示例 1:// 输入: [1, 2, 2, 3, 1]// 输出: 2// 解释:// 输入数组的度是2,因为元素1和2的出现频数最大,均为2./...原创 2019-08-04 12:58:43 · 94 阅读 · 0 评论