LeetCode
诶你爱我吗
不努力学习会变成猪哦
展开
-
剑指offer_JZ6 从尾到头打印链表 JZ24 反转链表
代码】剑指offer_JZ6 从尾到头打印链表 JZ24 反转链表。原创 2022-08-09 15:39:29 · 301 阅读 · 1 评论 -
Leetcode101_广度优先搜索_1162地图分析 934最短的桥
什么鬼示例,题目读半天没读懂意思是求每个海洋到陆地节点的最小值,然后返回这些最小值里面的最大值BFS搜索。原创 2022-07-18 22:11:53 · 243 阅读 · 0 评论 -
Leetcode101_回溯法_51N皇后问题
注意判断是否冲突的条件即皇后是否能放在第i行第j列,要看每一列,左斜和右斜是否冲突。a[i]表示在第i-1行的皇后在第a[i]-1列。遍历每一列,确定每一行皇后的位置并回溯。原创 2022-07-18 19:19:15 · 254 阅读 · 0 评论 -
Leetcode101_回溯法_46全排列 77组合 39组合总和 79. 单词搜索
定义flag标记元素是否已访问。原创 2022-07-18 17:12:52 · 248 阅读 · 0 评论 -
Leetcode101_深度优先搜索_547省份数量 417太平洋大西洋水流问题
深度优先搜索的思路是很直观的。遍历所有城市,对于每个城市,如果该城市尚未被访问过,则从该城市开始深度优先搜索,通过矩阵\textit{isConnected}isConnected得到与该城市直接相连的城市有哪些,这些城市和该城市属于同一个连通分量,然后对这些城市继续深度优先搜索,直到同一个连通分量的所有城市都被访问到,即可得到一个省份。遍历完全部城市以后,即可得到连通分量的总数,即省份的总数。...原创 2022-07-18 14:30:39 · 66 阅读 · 0 评论 -
Leetcode101_深度优先搜索_695岛屿的最大面积
给你一个大小为mxn的二进制矩阵grid。岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直的四个方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。岛屿的面积是岛上值为1的单元格的数目。计算并返回grid中最大的岛屿面积。如果没有岛屿,则返回面积为0。...原创 2022-07-18 11:01:42 · 95 阅读 · 0 评论 -
Leetcode101_排序算法_347前 K 个高频元素
用小根堆,创建优先队列。原创 2022-07-18 09:40:57 · 71 阅读 · 0 评论 -
Leetcode101_排序算法_912排序数组
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。...原创 2022-07-17 21:33:29 · 73 阅读 · 0 评论 -
Leetcode101_二分查找_540有序数组中的单一元素
代码】Leetcode101_二分查找_540有序数组中的单一元素。原创 2022-07-17 12:03:05 · 78 阅读 · 0 评论 -
Leetcode101_二分查找_33.81.搜索旋转排序数组ⅠⅡ
先找出最小值,然后判断target和nums[0]的大小,来决定目标值在左边还是右边,然后二分查找,注意特殊情况是没有旋转的,单独判断。原创 2022-07-17 10:54:40 · 109 阅读 · 0 评论 -
Leetcode101_二分查找_153、154寻找旋转排序数组中的最小值ⅠⅡ
判断mid和最后一个元素的大小,由于数组中的元素互不相同,所以虽然是闭区间,但是让i原创 2022-07-17 10:14:36 · 117 阅读 · 0 评论 -
Leetcode101_二分查找_34在排序数组中查找元素的第一个和最后一个位置
给你一个非负整数x,计算并返回x的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。原创 2022-07-17 10:14:59 · 61 阅读 · 0 评论 -
Leetcode101_二分查找_69x 的平方根
给你一个非负整数x,计算并返回x的算术平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去。注意不允许使用任何内置指数函数和算符,例如pow(x,0.5)或者x**0.5。原创 2022-07-16 18:38:43 · 67 阅读 · 0 评论 -
Leetcode101_双指针_340至多包含 K 个不同字符的最长子串
给定一个字符串s,找出至多包含k个不同字符的最长子串T。原创 2022-07-16 18:12:01 · 107 阅读 · 0 评论 -
Leetcode101_双指针_524通过删除字母匹配到字典里最长单词
给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。不难 就是比较复杂...原创 2022-07-16 16:57:12 · 210 阅读 · 0 评论 -
Leetcode101_双指针_680验证回文字符串 Ⅱ
给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。原创 2022-07-16 15:24:56 · 1486 阅读 · 0 评论 -
Leetcode101_双指针_633平方数之和
给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+b2=c。原创 2022-07-16 15:15:07 · 98 阅读 · 0 评论 -
Leetcode101_双指针_76最小覆盖子串
给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串“”。原创 2022-07-16 14:45:48 · 77 阅读 · 0 评论 -
Leetcode101_双指针_142.环形链表 II
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。注意pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。...原创 2022-07-16 13:57:39 · 55 阅读 · 0 评论 -
Leetcode101_双指针_88合并两个有序数组
publici++;}else{j++;p原创 2022-07-16 13:42:19 · 60 阅读 · 0 评论 -
Leetcode101_双指针_167两数之和 II - 输入有序数组
代码】Leetcode101_双指针_167两数之和II-输入有序数组。原创 2022-07-16 13:22:25 · 45 阅读 · 0 评论 -
leetcode算法题459——重复的子字符串 KMP算法实现
参考资料我觉得最主要是理解这个图,理解为什么要递归next[k]给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。原创 2022-07-16 11:05:47 · 1395 阅读 · 0 评论 -
leetcode算法题30——350两个数组的交集 II
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。记录第一个数组中每个元素出现的次数,遍历第二个数组,查找在哈希表中该元素出现次数是否大于0,如果大于0,说明该元素是交集,并把次数减一2.双指针排序后遍历如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。首先对两个数组进行排序,然后使用两个指针遍历两个数组。初始时,两个指针分别原创 2022-07-14 16:52:32 · 120 阅读 · 0 评论 -
Leetcode101_贪心算法_665非递减数列
输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。题解捏吗第一次看着题,直接比较一下不就行了吗??自信满满写出代码,发现直接WA,裂开了不通过的案例是 【3 4 2 3】,发现确实只比较是不可取的,所以在比较完之后额外增加一个判断,把非递减的改成递减的,然后再比较后面的class Solution {public: bool checkPossibility(vector<int>& ..原创 2022-03-22 20:50:13 · 132 阅读 · 0 评论 -
Leetcode101_贪心算法_406根据身高重建队列
输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]解释:编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为..原创 2022-03-22 20:45:17 · 131 阅读 · 0 评论 -
Leetcode101_贪心算法_122买卖股票得最佳时机Ⅱ
输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。题解题解一 回溯用dfs回溯虽然会超时,但是可以用这个题练一练dfs的思路class Solution {public: int res..原创 2022-03-22 20:40:41 · 125 阅读 · 0 评论 -
Leetcode101_贪心算法_763划分字母区间
输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。题解找出每个字符最后出现的位置,划分区间时设置开始位置start和结束位置end,然后比较每一次出现的字符的最后出现位置和end的大小,取最大值(取最大值是因为这个字符只能出现在一个片..原创 2022-03-22 20:33:12 · 110 阅读 · 0 评论 -
Leetcode101_贪心算法_452用最少数量的箭引爆气球
输入:points = [[10,16],[2,8],[1,6],[7,12]]输出:2解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球题解这个题和435无重叠区间很像,想要弓箭越少,则表明每一支弓箭要射爆的气球越多,因此可以先找出每次区间重叠最多的时候的气球数目,先按照结尾从小到大排序,每次都用下一组的开头和上一组的结尾进行比较,如果小于,说明这俩气球有重叠的区间,就可以用一根弓箭射爆,如果大于,说明这俩气球要用两根弓箭才能射爆,..原创 2022-03-22 20:25:58 · 116 阅读 · 0 评论 -
Leetcode101_贪心算法_605种花问题
输入:flowerbed = [1,0,0,0,1], n = 1输出:true题解参考了大佬的跳格子方法注意当index到最后一位时需要特殊判断一下class Solution {public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { for(int i = 0; i <flowerbed.size();){ if(flowerbed[i] == .原创 2022-03-22 20:17:44 · 418 阅读 · 0 评论 -
Leetcode101_贪心算法_435无重叠区间
输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。解题经典题目没啥说的,按照结尾排序,每次保留结尾最小且不与上一个区间重叠的区间即可class Solution {public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { if (intervals.empty()) ..原创 2022-03-22 20:13:02 · 52 阅读 · 0 评论 -
Leetcode101_贪心算法_135发糖果
输入:ratings = [1,0,2]输出:5解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。题解这道题看题解是需要遍历两遍,先从左往右遍历,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。关于为什么要遍历两遍,我是这么理解的:比如数组为ratings = [1 2 3 4 3 2 1]如果只..原创 2022-03-22 20:07:26 · 104 阅读 · 0 评论 -
Leetcode101_贪心算法_455分配饼干
找工作不得不开始刷题了,发现之前刷的题如果不记录一下 过一段时间就忘了,所以还是写到博客里面记录一下吧输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。解题数组g表示每个孩子的饥饿值,按照贪心策略的思想,每一次都满足饥饿度最小,也就是胃口最小的孩子,并分配到的最小的满足胃口的饼干,这样可以把更大的饼干分配给胃口更大的孩子原创 2022-03-22 19:58:14 · 107 阅读 · 0 评论 -
leetcode算法题29——两数相除
两数相除(中等)给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例解题这个题很坑的地方在于 因为输入的都是 int 型,比如被除数是 -2147483648,在 int 范围内,当除数是 -1 时,结果就超出了原创 2020-10-18 22:44:26 · 231 阅读 · 0 评论 -
leetcode算法题28——实现 strStr()
实现 strStr()(简单)实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例解题用两个for循环进行遍历查找即可class Solution {public: int strStr(string haystack, string needle) { if(needle.empty()) return 0原创 2020-10-18 21:04:33 · 134 阅读 · 0 评论 -
leetcode算法题27——移除元素
移除元素(简单)给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例解题这个题好简单,没有啥好说的,定义一个变量来记录移除元素后数组的位数在这里插入代码片,当nums[i]的值与val不同时,就让该变量对应数组位置的值变为nums[i],然后让变量+1,最后返回变量即可。class So原创 2020-10-18 16:55:53 · 123 阅读 · 0 评论 -
leetcode算法题26——删除排序数组中的重复项
删除排序数组中的重复项(简单)给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例解题采用双指针,让j指向已经覆盖到的没有重复的数组位置,然后移动i,比较i和j对应位置的值,如果不同,则让nums[++j]位置赋为nums[i]即可,最后注意返回值是判断数组是否为空。class Solution {public: int removeD原创 2020-10-17 16:46:59 · 150 阅读 · 0 评论 -
leetcode算法题25——K个一组翻转链表
K个一组翻转链表(困难)给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例解题思路一:这个题与之前两两交换链表中的节点很像,只是这次不再是相邻结点交换了,但思路都差不多一样,也是用三个指针来做,思路是先让pre指针指向头节点dummy,然后根据k的值对链表遍历,让cur指针指向第k个结点的下一个结点,比如对于-1->1->2->3->4-&原创 2020-10-17 16:01:16 · 130 阅读 · 0 评论 -
leetcode算法题14——最长公共前缀
最长公共前缀(简单)编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例输入: [“flower”,“flow”,“flight”]输出: “fl”输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解题这道题让我们求一系列字符串的共同前缀,没有什么特别的技巧,无脑查找即可,定义两个变量i和j,其中i是遍历搜索字符串中的字符,j是遍历字符串集中的每个字符串。原创 2020-09-07 17:04:30 · 186 阅读 · 0 评论 -
leetcode算法题24——两两交换链表中的节点
两两交换链表中的节点(中等)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例输入:head = [1,2,3,4]输出:[2,1,4,3]输入:head = []输出:[]输入:head = [1]输出:[1]解题思路一:这个题是基本的链表操作题,可以采取迭代的方法实现,先建立 dummy 节点作为头节点,让dummy的next指向head,然后定义cur、p、q三个指针,分别指向头节点和第一第二两原创 2020-10-16 15:13:22 · 168 阅读 · 0 评论 -
leetcode算法题23——合并K个升序链表
合并K个有序链表(困难)给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6输入:lists = []输出原创 2020-10-16 12:50:53 · 218 阅读 · 0 评论