
LeetCode刷题记录
采用JavaScript编写的算法题
罐子丶
这个作者很懒,什么都没留下…
展开
-
LeetCode题解之贪心算法——【中等】121. 买卖股票的最佳时机
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能原创 2021-01-26 13:51:54 · 334 阅读 · 0 评论 -
LeetCode题解之贪心算法——【中等】406. 根据身高重建队列
题目假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1在这里插入代码片输入:people = [[7,0原创 2021-01-26 11:27:23 · 302 阅读 · 0 评论 -
LeetCode题解之贪心算法——【中等】452. 用最少数量的箭引爆气球
题目在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需原创 2021-01-22 10:11:11 · 245 阅读 · 0 评论 -
LeetCode题解之贪心算法——【中等】435. 无重叠区间
题目给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。示例 1输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3输入: [ [1,2], [2,3] ]输出: 0解释: 你不需要移除任何区间,因为它们已经是无重叠的了。题解按照原创 2021-01-21 11:06:14 · 414 阅读 · 0 评论 -
LeetCode题解之贪心算法——【简单】455. 分发饼干
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1输入: g = [1,2,3], s = [1,1]输出: 1解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是原创 2021-01-21 10:16:44 · 184 阅读 · 0 评论 -
LeetCode题解之排序——【中等】75. 颜色分类—(还需改进)
题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]输入:nums = [2,0,1]输出:[0,1,2]输入:nums = [0]输出:[0]输入:nums = [1]输出:[1]题解统计频率输出时间复杂度:O(n);实际是O(3*原创 2021-01-20 09:33:28 · 133 阅读 · 0 评论 -
LeetCode题解之排序——【中等】451. 根据字符出现频率排序—(还需改进)
题目给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。题解计算每个字母出现的频率利用桶排序,将字原创 2021-01-20 09:03:48 · 138 阅读 · 0 评论 -
LeetCode题解之排序——【中等】347. 前 K 个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2输入: nums = [1], k = 1输出: [1]题解首先使用 map 来存储频率然后创建一个数组(有数量的桶),将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标(桶内)即可。时间复杂度:O(n)空间复杂度:O(n)var topKFrequent = function (nums, k)原创 2021-01-19 15:50:31 · 141 阅读 · 0 评论 -
LeetCode题解之排序——【中等】215. 数组中的第K个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度题解构建大顶堆当找到第k个大顶时就是数组中第k个最大的元素时间复杂度:O(nlogn)建堆的时间代价是 O(n),删除的总代价是 O原创 2021-01-19 10:21:24 · 142 阅读 · 0 评论 -
LeetCode题解之双指针——【中等】524. 通过删除字母匹配到字典里最长单词
题目给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "apple"示例 2输入:s = "abpcplea", d = ["a","b","c"]输出: "a"题解分别用两个指针遍历字符串和字符串字典假设已有匹原创 2021-01-15 13:45:41 · 173 阅读 · 0 评论 -
LeetCode题解之双指针——【简单】141.环形链表
题目给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,原创 2021-01-15 10:05:50 · 153 阅读 · 0 评论 -
LeetCode题解之双指针——【简单】88.合并两个有序数组
题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小等于 m + n)来保存 nums2 中的元素。示例 1输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2输入:nums1 = [1], m = 1,原创 2021-01-13 23:24:14 · 130 阅读 · 0 评论 -
LeetCode题解之双指针——【简单】680.验证回文字符串Ⅱ
题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1输入: "aba"输出: True示例 2输入: "abca"输出: True解释: 你可以删除c字符。注:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。题解双指针分别从字符串头尾开始移动头指针和尾指针指向的字母不同,则分别判断头指针往后移后和尾指针往前移后生成的字符串是否是回文字符串var validPalindrome = function (s) { let原创 2021-01-12 10:15:08 · 199 阅读 · 0 评论 -
LeetCode题解之双指针——【简单】345. 反转字符串中的元音字母
题目编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1输入:"hello"输出:"holle"示例 2输入:"leetcode"输出:"leotcede"题解利用Set集合判断是否是元音字母使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符var reverseVowels = function (s) { let Array_s = s.split("") let litter = new原创 2021-01-12 09:04:00 · 134 阅读 · 0 评论 -
LeetCode题解之双指针——【中等】633.平方数之和
题目给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c 。示例1输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例2输入:c = 3输出:false题解将左指针初始化为0,将右指针初始化为Math.floor(Math.sqrt(c))若 左指针2 +右指针2 === c,则return true若 左指针2 +右指针2 > c,则右指针 - -若 左指针2 +右指针2 < c,则左指针 ++原创 2021-01-11 16:53:05 · 271 阅读 · 0 评论 -
LeetCode题解之双指针——【简单】167.两数之和 II - 输入有序数组
题目给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, in原创 2021-01-11 15:43:44 · 350 阅读 · 4 评论 -
JavaScript-请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字function normalize(arr) { function correct(word){ var list =''; for(i=0;i<word.length;i++){ if(i === 0) list += wor...原创 2020-04-20 10:36:12 · 1076 阅读 · 0 评论 -
JavaScript-用filter()筛选出素数
用filter()筛选出素数:代码'use strict';function get_primes(arr) { let result = []; result = arr.filter(function(x){ if(x === 2) return x; else if(x != 1){ ...原创 2020-04-21 22:29:24 · 704 阅读 · 0 评论