LeetCode
文章平均质量分 93
记录自己的刷题过程
胖胖的懒羊羊
努力成为一名优秀的开发者。
很高兴,能够遇见你️
展开
-
LeetCode分类刷题-----贪心算法
所以说,当i走到cur的位置,如果没有遍历完,再去更新最大的覆盖范围。这样就确定了一个变量,那就是前边的人一定比后边的人高,不管后边的人怎么往前插,都不会影响以及排好序的人的k。要想总体上是最优解,那么局部上就要满足最优解,就要让尺寸大的饼干去让胃口大的孩子吃,而不能让尺寸很大的饼干去投喂胃口很小的孩子。每走一步,更新到当前步的最大覆盖范围,如果能覆盖到最后一个,那么就满足条件,否则,就不满足。然后第二次遍历数组的时候,right随着遍历的字母随时更新,更新的时候要保证right是最大的哪一个。原创 2023-03-01 14:10:33 · 738 阅读 · 0 评论 -
LeetCode分类刷题----回溯算法
这道题主要是怎么去重,用一个used数组,如果该数字用过,标记为true,如果没有用过,标记为false,然后把数组排一个序,如果当前元素和前一个元素一样,并且used标识的前一个数组没有用过,那么这个场景。怎么判断皇后的位置是否满足条件呢,先判断当前列上的位置有没有皇后,然后往左上角45度方向找,然后往右上角135度方向找,如果都没有皇后,那么就是满足题意的。用回溯的知识,每层数上代表一行,然后这一层数依次放一个,当第二层开始时,先要判断皇后的位置满不满足条件,如果满足条件再放,如果不满足,就不要放了。原创 2023-02-23 16:56:22 · 298 阅读 · 0 评论 -
LeetCode分类刷题----二叉树
这里的最小深度是一个节点的子树的最小深度,如果一个节点还有左节点或者右节点,那么此时它就不能称为一个最小节点。当找到叶子节点时,判断此时是不是最大深度,如果是,更新value值,因为是先进行左节点遍历,所以会先找到最大层数的左节点。定义两个指针,一个前指针,一个后指针,两个指针一步一步的走,采用中序遍历的方式,如果一步一步的走,将每次最小的差值记录下来。用递归的方式来进行比较,比较根节点的左右两个子树,判断出终止条件,当两边的值或者有一方为空节点时,都返回false。当节点的值比目标值大时,向左子树查找。原创 2023-02-17 21:58:44 · 597 阅读 · 0 评论 -
LeetCode分类刷题----栈与队列
当加入一个元素时,在单调队列中需要删除前边比它小的元素,保证这个队列单调递减,这样就能保证单调队列的值在窗口处是最大值。当弹出一个元素时,弹出的元素与队列中的队首元素一致时就弹出,否则就不用弹出。当元素出队列时,先判断出栈有没有元素,如果有,直接返回。运用一个栈结构,当遇见数字时,直接加入栈,当遇到符号时,将栈中最上边两个元素按照符号运算。栈的操作,当栈为空时或者字符与栈顶元素不一样时进行入栈操作。当遇到左括号时,给栈加入一个对应的右括号。当出栈时,将队列前边的元素出队再入队栈的长度减1次。原创 2023-02-02 23:35:29 · 409 阅读 · 0 评论 -
LeetCode分类刷题----哈希表篇
一直在滑动窗口里的字符数组填入right指针指向的数据,当distance满足条件时,此时可以缩小窗口了,即移动左指针,当左右指针的差值恰好等于目标字符的长度时,此时就代表子串找到了。这道题的重点就是判断数字是否会出现无限循环的情况,我们可以把每次遍历的数记录起来,然后如果出现同样的数,说明这个数字就不是快乐数。如果没有出现,就让它进入循环即可。用set做:将第一个数组出现的字母存在set里,然后再遍历一次,将第二个数组也在set出现的存在result里即可,result也用set来实现,可以去重。原创 2023-01-16 22:19:23 · 2435 阅读 · 0 评论 -
LeetCode分类刷题----链表篇
设立两个快慢指针,先让快指针走n+步,当快指针指向链表尾节点的时候,此时慢指针恰好走到要删除节点的前一个节点,此时对慢指针进行删除即可。设头节点到成环节点的距离为x,设成环节点到相遇节点的距离为y,设相遇节点到成环节点的距离为z。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。两个指针,当着两个指针走向尽头时,然后转向另一个链表的头节点,直到这两个链表相遇,因为这两个节点都走了同样的长度。当n=1的时候有x=z。原创 2023-01-12 19:00:03 · 1250 阅读 · 1 评论 -
LeetCode分类刷题---数组篇
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。由于是要找到一个范围。所以分两次二分查找。左边界,当mid等于target还要继续往前找。直到left=right,此时找到的左边界就是小于目标值的第一个。右边界:当mid=target的适合更新left。指针的左节点就是右边界的值。原创 2023-01-05 15:54:01 · 935 阅读 · 0 评论 -
LeetCode118.杨辉三角
题目描述:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]解题思路:1.杨辉三角每一行的数字都是根据上一行的值求出,我们就一行一行的求即可,用一个二维...原创 2020-04-17 18:18:22 · 303 阅读 · 0 评论 -
LeetCode53.最大子序和
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解题思路:运用动态规划的思想,记录当前序列的最大...原创 2020-04-15 22:13:52 · 269 阅读 · 0 评论 -
LeetCode120.三角形最小路径和
题目描述:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。解题思路:1.题目给出求最短路径和,运用递推的思想,最后一排的数字到最低端的最小路径是他们本身,然后...原创 2020-04-10 22:11:24 · 242 阅读 · 0 评论 -
LeetCode100.相同的树
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1...原创 2020-04-09 11:53:50 · 239 阅读 · 0 评论 -
LeetCode38.外观数列
题目描述:「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一...原创 2020-04-05 11:51:17 · 259 阅读 · 0 评论 -
LeetCode83.删除排序链表中的重复元素
题目描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3解题思路:1.因为链表有序排列,所以只需要按顺序比较即可,当前元素和下一个元素一样,就把指针指向下下个元素解题代码:publi...原创 2020-04-04 15:19:39 · 225 阅读 · 0 评论 -
LeetCode88.合并两个有序数组
题目描述:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。 说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例:输入:nums1 = [1,2,3,0,0,0], ...原创 2020-04-03 19:42:19 · 250 阅读 · 0 评论 -
LeetCode912.排序数组
题目描述:给你一个整数数组 nums,将该数组升序排列。 示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5] 提示:1 <= nums.length <= 50000-50000 <= nums[i] <= 50000解题...原创 2020-03-31 12:13:58 · 263 阅读 · 0 评论 -
LeetCode62.圆圈中最后剩下的数字数学中的约瑟夫环
题目描述:0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17...原创 2020-03-30 21:02:50 · 249 阅读 · 0 评论 -
LeetCode820.单词的压缩编码
题目描述:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 "#" 结束,来恢复我们之前的单词列表。那么成功对给定...原创 2020-03-28 21:17:33 · 272 阅读 · 0 评论 -
LeetCode914.卡牌分组
题目描述:给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。 示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 ...原创 2020-03-27 18:22:10 · 323 阅读 · 0 评论 -
LeetCode999.车的可用捕获量
题目描述:在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外...原创 2020-03-26 12:21:03 · 356 阅读 · 0 评论 -
LeetCode70.爬楼梯
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2...原创 2020-03-24 19:08:34 · 275 阅读 · 0 评论 -
LeetCode35.搜索插入位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出...原创 2020-03-24 18:16:29 · 309 阅读 · 0 评论 -
LeetCode28.实现strStr()
题目描述:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", nee...原创 2020-03-24 18:01:12 · 268 阅读 · 0 评论 -
LeetCode26. 删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度...原创 2020-03-23 16:11:14 · 249 阅读 · 0 评论 -
LeetCode27.移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nu...原创 2020-03-22 22:06:16 · 252 阅读 · 0 评论 -
LeetCode182.查找重复的电子邮箱
题目描述:编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。示例:+----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+---------+根据以上输入,你的查询应返回以下结果:+---------+|...原创 2020-03-20 20:28:52 · 348 阅读 · 0 评论 -
LeetCode21.合并两个有序链表
题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路:创建一个新链表,每次都从比较小的那个链表中选一个节点,直到一个链表选完,再把剩下的链表都加上ps:真是说来惭愧,刚学完数据结构,听...原创 2020-03-20 20:07:46 · 252 阅读 · 0 评论 -
LeetCode 175.组合两个表
题目描述:表1: Person+-------------+---------+| 列名 | 类型 |+-------------+---------+| PersonId | int || FirstName | varchar || LastName | varchar |+-------------+---------+Pe...原创 2020-03-13 19:37:51 · 312 阅读 · 0 评论 -
LeetCode1103.分糖果
题目描述:排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。重复上述过程(每次...原创 2020-03-08 13:07:56 · 295 阅读 · 0 评论 -
LeetCode 20.有效的括号
题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例...原创 2020-02-22 13:26:32 · 268 阅读 · 0 评论 -
LeetCode 14最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解题思路:1.首先要先找到每两个...原创 2020-02-20 21:06:49 · 267 阅读 · 0 评论 -
LeetCode13罗马数字转整数
题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并...原创 2020-02-18 22:10:36 · 272 阅读 · 0 评论 -
LeetCode9回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数...原创 2020-02-17 20:53:18 · 364 阅读 · 0 评论 -
LeetCode7整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解...原创 2020-02-16 16:46:56 · 281 阅读 · 0 评论 -
LeetCode1029两地调度
题目描述:公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。示例:输入:[[10,20],[30,200],[400,50],[30,20]]输出:110解释:第一个人去 A 市,费用为 10。第二个人去 A 市,费用为 30。第三个人去 ...原创 2020-02-06 15:48:05 · 324 阅读 · 0 评论 -
LeetCode1两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]自己的代码:...原创 2020-01-20 12:01:13 · 270 阅读 · 0 评论