哈夫曼树的js实现 前言哈夫曼树是数据压缩编码算法的基础,本文使用JavaScript语言实现了该算法。算法流程:输入待编码的字符串,算法去构造哈夫曼树,从而实现对字符串的二进制压缩编码。对于哈夫曼树理论的学习,可去参见其他文章。本文仅包含实现的代码以及注释。注释比较丰富,相信不难理解。算法实现树节点既然是树数据结构,就要有树节点,下面是树节点定义class Node { construc...
我的前端JS算法库 分享我的JavaScript算法库,这是我工作之余,刷LeetCode积累而成。目前有400多道题解,欢迎关注。地址:https://github.com/cunzaizhuyi/js-leetcode后面,我会重温这些题,添加多种解法,以及添加注释。希望对您有所帮助。...
5-medium-最长回文串-JavaScript版 // 5 medium 最长回文串//// 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。// 示例 1:// 输入: "babad"// 输出: "bab"// 注意: "aba" 也是一个有效答案。// 示例 2:// 输入: "cbbd"// 输出: "bb"/** * @param {string} s * @ret...
LeetCode781-medium-森林中的兔子-JavaScript版 // 781 medium 森林中的兔子//// 森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在answers数组里。//// 返回森林中兔子的最少数量。//// 示例:// 输入: answers = [1, 1, 2]// 输出: 5// 解释:// 两只回答了 "1" 的兔子可能有相同的颜色,设为红...
LeetCode205-easy-同构字符串-JavaScript版 // 205 easy 同构字符串// 跟290单词规律一模一样////// 给定两个字符串s和t,判断它们是否是同构的。// 如果s中的字符可以被替换得到t,那么这两个字符串是同构的。// 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。//// 示例 1:// 输入: s = "egg", t ...
LeetCode136-easy-只出现一次的数字-JavaScript版 // 136 easy 只出现一次的数字// 跟540题一样的解法//// 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。//// 说明:// 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?//// 示例 1:// 输入: [2,2,1]// 输出: 1// 示例2:// 输入: [4,1,2...
LeetCode771-easy-宝石与石头-JavaScript版 // 771 easy 石头与宝石//// 给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。// S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。// J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。//// 示例 1:// 输入: J = "aA", S = "aAAbbb...
LeetCode31-easy-下一个排列-JavaScript版 // medium 31 下一个排列// 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。//// 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。//// 必须原地修改,只允许使用额外常数空间。//// 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。// 1,2,3 → 1,3,2// 3,2,1 → 1,...
LeetCode1-两数之和-easy-JavaScript版 // easy 1 两数之和//// 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。// 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。//// 示例:// 给定 nums = [2, 7, 11, 15], target = 9// 因为 nums[0] + nums[1...
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...
leetcode605-easy-种花问题-JavaScript版 // 605 easy 种花问题// 跟849题一样// 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。//// 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。//// 示...
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...
Leetcode09-medium-长度最小的子数组-JavaScript版 // medium 209 长度最小子数组// 给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。// 如果不存在符合条件的连续子数组,返回 0。//// 示例:// 输入: s = 7, nums = [2,3,1,2,4,3]// 输出: 2// 解释: 子数组[4,3]是该条件下的长度最小的连续子数组。// 进阶...
LeetCode665-easy-非递减数列-JavaScript版 // 665 easy 非递减数列// 给定一个长度为n的整数数组,你的任务是判断在最多改变1 个元素的情况下,该数组能否变成一个非递减数列。// 我们是这样定义一个非递减数列的:对于数组中所有的i (1 <= i < n),满足array[i] <= array[i + 1]。//// 示例 1:// 输入: [4,2,3]// 输出: True/...
LeetCode849-easy-到最近的人的最大距离-JavaScript版 // 849 easy 到最近的人的最近距离// 在一排座位(seats)中,1代表有人坐在座位上,0代表座位上是空的。// 至少有一个空座位,且至少有一人坐在座位上。// 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。// 返回他到离他最近的人的最大距离。//// 示例 1:// 输入:[1,0,0,0,1,0,1]// 输出:2// 解释...
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// 解释:这三...
leetcode830-easy-较大分组的位置 // 830 easy 较大分组的位置// 在一个由小写字母构成的字符串S中,包含由一些连续的相同字符所构成的分组。// 例如,在字符串 S = "abbxxxxzyy"中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。// 我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。// 最终结果按照字典顺序输...
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...
LeetCode1160-easy-拼写单词-JavaScript版 // 1160 easy 拼写单词//// 给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。// 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。//// 注意:每次拼写时,chars 中的每个字母都只能用一次。// 返回词汇表words中你掌握的所有单词的 长度之...