LeetCode 【前端必刷】和你一起你轻松刷题
文章平均质量分 60
刷题!刷题!刷题!冲击大厂!
一百个Chocolate
一个小帅哥和某厂前端搬砖。
频道内容: 前端技术,编程,我的思考。
用心去做自己热爱的事情️
座右铭: 学如逆水行舟,不进则退。
展开
-
js-leetcode前端动态规划入门第四天刷题打卡「跳跃游戏」贪心大法!
js-leetcode前端动态规划入门第四天刷题打卡原创 2021-08-05 13:01:25 · 351 阅读 · 0 评论 -
js-leetcode前端动态规划第 3 天打卡「打家劫舍」,一个函数解决两个问题
js-leetcode前端动态规划第 3 天打卡原创 2021-08-04 10:41:34 · 305 阅读 · 0 评论 -
javascript 前端动态规划入门,前两天刷题打卡
最近,和组里大佬聊了聊,突然就扯到了算法这块,想当初为了参与比赛,面试等准备了许多的算法题,但现在成为一名社畜之后对这块领域知识接触的变少了,甚至觉得这个没必要做了。聊着聊着大佬就说了几句:保持练习,题到做时方恨菜。原创 2021-08-03 15:28:07 · 352 阅读 · 0 评论 -
LeetCode 93. 复原IP地址 (dfs+回溯)
题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。示例 1:输入:s = "25525511135"输出:["255.255.11.135",原创 2020-08-23 16:16:25 · 756 阅读 · 0 评论 -
LeetCode 1. 两数之和 (map)
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码var twoSum = function (nums, target) { let map = new Map(原创 2020-08-23 13:49:10 · 375 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历 (递归与非递归解法)
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?代码递归解法var inorderTraversal = function(root) { if(!root) return [] let res = [] let trace = (root) => { if(!root) return原创 2020-08-23 13:30:58 · 284 阅读 · 1 评论 -
LeetCode 498. 对角线遍历 (找规律)
题目给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:说明:给定矩阵中的元素总数不会超过 100000 。解题思路对于m*n矩阵,所有方向应该有m+n-1次当 m=3, n=3 时(0, 0) m+n=0 正序(0, 1) m+n=1 倒叙原创 2020-08-23 13:14:57 · 378 阅读 · 0 评论 -
【经典面试题:最长01子串】 有一个仅由0和1组成的01串,找到其中最长的一段子串,使得该子串中0和1的数目相等
题目有一个仅由0和1组成的01串,找到其中最长的一段子串,使得该子串中0和1的数目相等解题思路如果将0看做-1,则我们要找的子串是最长的和为0的子串。这种子串求和的问题,一般采用前缀和的方法来解决。用Sum[i]代表前i个数的和,问题的模型转换为,找到i和j,满足Sum[i] 与Sum[j]相等,且|i-j|最大。使用Hash表作为辅助数据结构,Hash表中记录了获得某个Sum时最小的i。从左到右遍历Sum[i],在Hash表中查找是否存在,如果存在,则记录下Hash[Sum[i原创 2020-06-21 11:08:37 · 6007 阅读 · 0 评论 -
LeetCode 46. 全排列【dfs】
题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解题思路怎样输出所有的排列方式呢?对于每一个当前位置 i,我们可以将其于之后的任意位置交换, 然后继续处理位置 i+1,直到处理到最后一位。为了防止我们每此遍历时都要新建一个子数组储存位置i之前已经交换好的数字,我们可以利用回溯法,只对原数组进行修改,在递归完成后再修改回来。我们原创 2020-05-20 19:13:38 · 583 阅读 · 0 评论 -
LeetCode 520. 检测大写字母【力扣,我爱你】
题目描述给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。单词中所有字母都不是大写,比如"leetcode"。如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。否则,我们定义这个单词没有正确使用大写字母。示例 1:输入: “USA”输出: True示例 2:输入: “FlaG”输出: False注意: 输入是由大写和小写拉丁字母组成的非空单词。解题思路今天520 , 力扣,原创 2020-05-20 15:30:05 · 578 阅读 · 0 评论 -
LeetCode 417. 太平洋大西洋水流问题【dfs】
题目描述给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵:太平洋 ~ ~ ~ ~ ~~ 1 2 2 3 (5) *~ 3原创 2020-05-20 10:07:34 · 557 阅读 · 0 评论 -
LeetCode 547. 朋友圈【dfs】
题目描述班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入:[[1,1,0],[1,1,0],[0,0,1]]输出: 2说明:已知学生0和原创 2020-05-20 09:27:08 · 544 阅读 · 0 评论 -
LeetCode 695. 岛屿的最大面积【dfs】
题目描述给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],原创 2020-05-20 09:08:31 · 465 阅读 · 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时候,每加进来一个,堆顶就要弹出一个。数组遍历完,最终堆顶的元素就是第K大的(堆原创 2020-05-19 16:39:52 · 521 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II【二分查找】
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: false解题思路本题是需要使用二分查找,怎么原创 2020-05-19 11:31:52 · 377 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置【二分查找】
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]解题思路可以看作是自己实现 C++ 里的 lower_boun原创 2020-05-19 10:03:21 · 383 阅读 · 0 评论 -
LeetCode 69. x 的平方根 【二分查找】
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。解题思路我们可以把这道题想象成,给定一个非负整数 a,求 f(x) = x2 −a = 0 的解。因为我们只考虑 x ≥ 0,所以 f(x)在定义域上是单调递增的。考虑到 f(0)原创 2020-05-19 09:12:24 · 451 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串【滑动窗口】
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解原创 2020-05-19 08:36:29 · 390 阅读 · 0 评论 -
LeetCode 438. 找到字符串中所有字母异位词【滑动窗口】
题目描述给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例 1:输入:s: “cbaebabacd” p: “abc”输出:[0, 6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc”原创 2020-05-18 23:28:23 · 353 阅读 · 0 评论 -
LeetCode 567. 字符串的排列 【滑动窗口】
题目描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间解题思路这道题依旧是可以用滑动窗口算法来原创 2020-05-18 11:31:06 · 419 阅读 · 1 评论 -
LeetCode 76. 最小覆盖子串 【滑动窗口】
题目描述给定两个字符串 S 和T,求 S 中包含T 所有字符的最短连续子字符串的长度,同时要求时间 复杂度不得超过O(n)。解题思路需要思考以下四个问题:1、当移动 right 扩大窗口,即加入字符时,应该更新哪些数据?2、什么条件下,窗口应该暂停扩大,开始移动left 缩小窗口?3、当移动 left缩小窗口,即移出字符时,应该更新哪些数据?4、我们要的结果应该在扩大窗口时还是缩小窗...原创 2020-05-07 11:09:54 · 706 阅读 · 0 评论 -
LeetCode 142. Linked List Cycle II【快慢指针】(Floyd判圈法)
题目描述给定一个链表,如果有环路,找出环路的开始点。解题思路对于链表找环路的问题,有一个通用的解法——快慢指针(Floyd判圈法)。给定两个指针, 分别命名为 slow 和 fast,起始位置在链表的开头。每次 fast 前进两步,slow 前进一步。如果 fast 可以走到尽头,那么说明没有环路;如果fast可以无限走下去,那么说明一定有环路,且一定存 在一个时刻slow和fast相遇。当...原创 2020-05-06 14:39:29 · 1152 阅读 · 3 评论 -
LeetCode 88. MergeSortedArray(Easy)【玩转双指针】
题目描述给定两个有序数组,把两个数组合并为一个。解题思路由于题目要求不借助第三个数组,合并到 nums1 上,就用尾指针,然后逐一比较,运用归并排序的思想来解答。最后判断一下 nums2 数组是否还存在元素,若存在,直接放入(因为数组是有序的)。ACclass Solution {public: void merge(vector<int>& nums1, ...原创 2020-05-06 14:16:49 · 543 阅读 · 0 评论 -
LeetCode 167. 两数之和 II - 输入有序数组【玩转双指针】
题目描述在一个增序的整数数组里找到两个数,使它们的和为给定值。已知有且只有一对解。解题思路因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最 小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍历。 如果两个指针指向元素的和等于给定值,那么它们就是我们要的结果。如果两个指针指向元 素的和小于给定值,我们把左边的指针右移一位,使得当前...原创 2020-05-06 14:03:47 · 632 阅读 · 0 评论 -
LeetCode 435. 无重叠区间【贪心】
题目描述给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。解题思路在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间 就越大,就越能保留更多的区间。因此,我们采取的贪心策略为,优先保留结尾小且不相交的区间。具体实现方法为,先把区间按照结尾的大小进行增序排序,每次选择结尾最小且和前一个选 择的区间不重叠的区间。我们这里使用 C++...原创 2020-05-06 13:37:32 · 773 阅读 · 0 评论 -
LeetCode 135. 分发糖果【贪心】
题目描述一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一 个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。解题思路把所有孩子的糖果数初始化为 1; 先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加1;再从右往左遍历一遍,如...原创 2020-05-06 13:04:15 · 760 阅读 · 0 评论 -
LeetCode 455. 分发饼干【贪心】
题目描述有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃 最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩 子可以吃饱。解题思路贪心。对孩子饥饿度和饼干尺寸从小到大排序,然后逐一比较,满足条件就算一个孩子。ACclass Solution {public: int findContentChildren(vec...原创 2020-05-06 11:54:31 · 1148 阅读 · 0 评论