leetcode
文章平均质量分 59
leetcode刷题
D了一天bug忘了编译
欢迎交流!
展开
-
C语言力扣第56题之合并区间。排序+双指针
区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。...原创 2022-08-08 21:27:21 · 383 阅读 · 0 评论 -
C语言力扣第58题之最后一个单词的长度。从后往前遍历
由若干单词组成,单词前后用一些空格字符隔开。是指仅由字母组成、不包含任何空格字符的最大子字符串。最后一个单词是长度为6的“joyboy”。最后一个单词是“World”,长度为5。最后一个单词是“moon”,长度为4。总体而言题目比较简单。...原创 2022-08-07 22:20:02 · 315 阅读 · 0 评论 -
C语言力扣第60题之排列序列。广度优先搜索、简单除法定位
按大小顺序列出所有排列情况,并一一标记,当。原创 2022-08-06 21:45:52 · 409 阅读 · 0 评论 -
C语言力扣第59题螺旋矩阵②。模拟矩阵
按照要求,初始位置设为矩阵的左上角,初始方向设为向右。若下一步的位置超出矩阵边界,或者是之前访问过的位置,则顺时针旋转,进入下一个方向。如此反复直至填入 n^2 个元素。记 matrix为生成的矩阵,其初始元素设为 0。由于填入的元素均为正数,我们可以判断当前位置的元素值,若不为 0,则说明已经访问过此位置。该题目思路与I类似,感兴趣可参考本人另一篇博客。所有元素,且元素按顺时针顺序螺旋排列的。...原创 2022-08-05 22:02:34 · 171 阅读 · 0 评论 -
C语言力扣第55题之跳跃游戏。贪心算法
对于当前遍历到的位置 x,如果它在 最远可以到达的位置 的范围内,那么我们就可以从起点通过若干次跳跃到达该位置,因此我们可以用 x+nums[x] 更新 最远可以到达的位置。根据题目的描述,只要存在一个位置 x,它本身可以到达,并且它跳跃的最大长度为 x+nums[x]],这个值大于等于 yyy,即 x+nums[x]≥y,那么位置 y 可以到达。在遍历的过程中,如果 最远可以到达的位置 大于等于数组中的最后一个位置,那就说明最后一个位置可达,我们就可以直接返回 True 作为答案。给定一个非负整数数组。.原创 2022-08-04 21:09:16 · 700 阅读 · 0 评论 -
C语言力扣第54题之螺旋矩阵。模拟旋转
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]链接:https://leetcode.cn/problems/spiral-matrix。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]商业转载请联系官方授权,非商业转载请注明出处。输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5]...原创 2022-08-03 22:12:57 · 323 阅读 · 0 评论 -
C语言力扣第50题之Pow(x,n),求x的n次幂。递归算法
的顺序,在x→x2x\tox^2x→x2,x2→x4,x19→x38这些步骤中,我们直接把上一次的结果进行平方,而在x4→x9,x9→x19,x38→x77这些步骤中,我们把上一次的结果进行平方后,还要额外乘一个x。的顺序,从x开始,每次直接把上一次的结果进行平方,计算6次就可以得到x^{64}的值,而不需要对x乘63次x。如果n为奇数,那么x^n=y^2×x;当我们要计算x^n时,我们可以先递归地计算出y=x⌊n/2⌋y=x^⌊n/2⌋,其中。...原创 2022-08-01 22:14:49 · 1878 阅读 · 0 评论 -
C语言力扣第47题全排列 II。搜索回溯
假设我们有3个重复数排完序后相邻,那么我们一定保证每次都是拿从左往右第一个未被填过的数字,即整个数组的状态其实是保证了[未填入,未填入,未填入]到[填入,未填入,未填入],再到[填入,填入,未填入],最后到[填入,填入,填入]的过程的,因此可以达到去重的目标。此题是「46.全排列」的进阶,序列中包含了重复的数字,要求我们返回不重复的全排列,那么我们依然可以选择使用搜索回溯的方法来做。输出[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]...原创 2022-07-31 21:34:39 · 112 阅读 · 0 评论 -
C语言力扣第48题之旋转图像。辅助数组
这样以来,我们使用一个与matrix大小相同的辅助数组matrixnew{matrix},临时存储旋转后的结果。我们遍历matrix中的每一个元素,根据上述规则将该元素存放到matrixnew{matrix}_中对应的位置。我们将其翻译成代码。由于矩阵中的行列从000开始计数,因此对于矩阵中的元素matrix[row][col],在旋转后,它的新位置为matrixnew[col][n−row−1]。对于矩阵中第i行的第j个元素,在旋转后,它出现在倒数第i列的第j个位置。...原创 2022-07-30 21:47:34 · 195 阅读 · 0 评论 -
C语言力扣第46题之全排列。回溯法
输出[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个不含重复数字的数组nums,返回其所有可能的全排列。排列举例如1,2,3的排列方法A3_3=3!得到结果--(1,3,2)|得到结果--(1,2,3)组合举例如1,2,3的组合方法C3_3=1种。下标[0]1->[1]2->[2]3。1,2,3的全排序需要做才能计算出来。重复步骤1和步骤2,就能等到所有的结果。输入nums=[1,2,3]......原创 2022-07-29 22:03:44 · 812 阅读 · 0 评论 -
C语言力扣第61题之旋转链表。双端队列与构造循环链表
3、接下来就是依次执行tail->next=head,head=p->next,p->next=nullptr,将链表的后k个节点和前n-k个节点拼接到一块,并让head指向新的头节点(p->next),新的尾节点即p节点的next指针指向null。假设链表的长度为n,为了将链表每个节点向右移动k个位置,我们只需要将链表的后k%n个节点移动到链表的最前面,然后将链表的后k%n个节点和前n-k个节点连接到一块即可。输入head=[0,1,2],k=4。...原创 2022-07-28 20:38:59 · 116 阅读 · 0 评论 -
C语言力扣第45题之跳跃游戏 II。遍历跳跃
从下标为0跳到下标为1的位置,跳1步,然后跳3步到达数组的最后一个位置。给你一个非负整数数组nums,你最初位于数组的第一个位置。输入nums=[2,3,0,1,4]解释跳到最后一个位置的最小跳跃数是2。你的目标是使用最少的跳跃次数到达数组的最后一个位置。输入nums=[2,3,1,1,4]数组中的每个元素代表你在该位置可以跳跃的最大长度。假设你总是可以到达数组的最后一个位置。...原创 2022-07-27 22:15:39 · 377 阅读 · 0 评论 -
C语言力扣第43题之字符串相乘。优化竖式
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。链接https//leetcode.cn/problems/multiply-strings。注意不能使用任何内置的BigInteger库或直接将输入转换为整数。num1和num2都不包含任何前导零,除了数字0本身。输入num1="123",num2="456"输入num1="2",num2="3"输出"56088"...原创 2022-07-26 22:24:05 · 395 阅读 · 0 评论 -
C语言力扣第41题之缺失的第一个正数。两种方法,预处理快排与原地哈希
那么,我们可以采取这样的思路就把111这个数放到下标为0的位置,2这个数放到下标为1的位置,按照这种思路整理一遍数组。先进行一遍从小到大的快排,时间复杂度为O(NlogN),再根据前面的思路从前往后遍历数组,时间复杂度为O(N),则总时间复杂度为O(NlogN)+O(N)=O(NlogN)设数组大小为N,已知最小正整数为1,则可先设缺失的最小正整数为n=1,那么我们只要从1开始,判断n是否在数组里,若在数组里,则n加一,若不在数组里,则缺失的最小正整数仍为n。...原创 2022-07-25 23:02:46 · 308 阅读 · 0 评论 -
C语言力扣第42题之接雨水。四种方法——暴力、动态规划、栈、双指针
如果当前的条形块小于或等于栈顶的条形块,我们将条形块的索引入栈,意思是当前的条形块被栈中的前一个条形块界定。如果我们发现一个条形块长于栈顶,我们可以确定栈顶的条形块被当前条形块和栈的前一个条形块界定,因此我们可以弹出栈顶元素并且累加答案到ans。解释上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。输入height=[0,1,0,2,1,0,1,3,2,1,2,1].........原创 2022-07-24 23:17:08 · 704 阅读 · 0 评论 -
C语言力扣第53题之最大子数组和。动态规划与分治
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。链接https//leetcode.cn/problems/maximum-subarray。进阶如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的分治法求解。著作权归领扣网络所有。输入nums=[-2,1,-3,4,-1,2,1,-5,4]解释连续子数组[4,-1,2,1]的和最大,为6。输入nums=[5,4,-1,7,8]输入nums=[1]...原创 2022-07-23 22:39:44 · 401 阅读 · 0 评论 -
C语言力扣第39题之组合总和。回溯法与遍历法
给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的所有不同组合,并以列表形式返回。2和3可以形成一组候选,2+2+3=7。输入candidates=[2,3,6,7],target=7。输入candidates=[2,3,5],target=8。输出[[2,2,2,2],[2,3,3],[3,5]]输出[[2,2,3],[7]].........原创 2022-07-22 22:44:39 · 644 阅读 · 0 评论 -
C语言力扣第38题之外观数列。三种方法(遍历法、递归法与狼灭法)
countAndSay(4)=读"21"=一个2+一个1="12"+"11"="1211"描述前一项,这个数是1211即“一个1+一个2+二个1”,记作"111221"描述前一项,这个数是21即“一个2+一个1”,记作"1211"countAndSay(2)=读"1"=一个1="11"描述前一项,这个数是1即“一个1”,记作"11"给定一个正整数n,输出外观数列的第n项。...原创 2022-07-21 23:15:07 · 263 阅读 · 0 评论 -
C语言力扣第32题之最长有效括号。用栈实现
链接https//leetcode.cn/problems/longest-valid-parentheses。给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。s[i]为'('或')'解释最长有效括号子串是"()()"解释最长有效括号子串是"()"输入s=")()())"来源力扣(LeetCode)输入s="(()"......原创 2022-07-20 22:35:24 · 592 阅读 · 0 评论 -
C语言力扣第35题之搜索插入位置。经典二分法
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。输入nums=[1,3,5,6],target=2。输入nums=[1,3,5,6],target=7。输入nums=[1,3,5,6],target=5。nums为无重复元素的升序排列数组。请必须使用时间复杂度为O(logn)的算法。35.搜索插入位置。...原创 2022-07-19 22:34:46 · 258 阅读 · 0 评论 -
C语言力扣第33题之搜索旋转排序数组。三种方法
在传递给函数之前,nums在预先未知的某个下标k(0原创 2022-07-18 19:02:53 · 151 阅读 · 0 评论 -
C语言力扣第34题之在排序数组中查找元素的第一个和最后一个位置。两种方法
/链接https//leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array。//输入nums=[5,7,7,8,8,10],target=8。//输入nums=[5,7,7,8,8,10],target=6。//如果数组中不存在目标值target,返回[-1,-1]。//输出[-1,-1]//输出[-1,-1]//输出[3,4]......原创 2022-07-17 22:35:19 · 1087 阅读 · 0 评论 -
C语言力扣第25题之k个一组反转链表。多指针遍历
特殊情况,当翻转部分长度不足k时,在定位end完成后,end==null,已经到达末尾,说明题目已完成,直接返回即可。初始需要两个变量pre和end,pre代表待翻转链表的前驱,end代表待翻转链表的末尾。给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。输入head=[1,2,3,4,5],k=2。输入head=[1,2,3,4,5],k=3。每次翻转前,要确定翻转链表的范围,这个必须通过k此循环来确定。...原创 2022-07-16 23:44:56 · 183 阅读 · 0 评论 -
C语言力扣第206题之反转链表。双指针法,迭代递归(三种方法)。图文保姆教程
使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作ret.此后,每次函数在返回的过程中,让当前结点的下一个结点的next指针指向当前节点。同时让当前结点的next指针指向NULL,从而实现从链表尾部开始的局部反转。每次都让head下一个结点的next指向cur,实现一次局部反转。给你单链表的头节点head,请你反转链表,并返回反转后的链表。原链表的头结点就是反转之后链表的尾结点,使用head标记.输入head=[1,2,3,4,5]...原创 2022-07-15 21:56:34 · 592 阅读 · 0 评论 -
C语言力扣第23题之合并K个升序序列链表。四种方法
链接https//leetcode.cn/problems/merge-k-sorted-lists。输入lists=[[1,4,5],[1,3,4],[2,6]]商业转载请联系官方授权,非商业转载请注明出处。请你将所有链表合并到一个升序链表中,返回合并后的链表。输出[1,1,2,3,4,4,5,6]给你一个链表数组,每个链表都已经按升序排列。将它们合并到一个有序链表中得到。lists[i]按升序排列。输入lists=[[]]输入lists=[]......原创 2022-07-14 22:28:48 · 616 阅读 · 0 评论 -
C语言力扣第29题之两数相除。位运算
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3 输出 : 3 解释 : 10 / 3 = truncate(3.33333..) = tru原创 2022-07-13 19:14:03 · 522 阅读 · 0 评论 -
C语言力扣第24题之两两交换链表中的节点。递归与非递归
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1, 2, 3, 4]输出:[2, 1, 4, 3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围[0, 100] 内0 ...原创 2022-07-12 18:51:57 · 377 阅读 · 0 评论 -
C语言力扣第28题之实现Strstr。KMP算法
实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 - 1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = "hello", nee原创 2022-07-11 23:25:16 · 474 阅读 · 0 评论 -
C语言力扣第27题之移除元素。双指针法
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明 :为什么返回数值是整数,但输出的答案是数组呢 ?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下 :// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int len =原创 2022-07-10 22:23:11 · 115 阅读 · 0 评论 -
C语言力扣第四题寻找两个数的中位数(三种方法)
//给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。////算法的时间复杂度应该为 O(log(m + n)) 。////示例 1:////输入:nums1 = [1, 3], nums2 = [2]//输出:2.00000//解释:合并数组 = [1, 2, 3] ,中位数 2////示例 2:////输入:nums1 = [1, 2], nums2 = [3, 4]//输出:2.50000//解释:原创 2022-06-22 22:59:40 · 1046 阅读 · 2 评论 -
C语言力扣第八题之字符串转换整数。遍历法
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C / C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,"123" -原创 2022-06-26 23:29:35 · 108 阅读 · 0 评论 -
C语言力扣第五题之回文数(两种方法)
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"来源:力扣(LeetCode)链接:https ://leetcode.cn/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 方法一:建立一个新的字符串数组,让原本的字符串数组倒序,同时遍历两个数组,找两个字符原创 2022-06-23 23:25:03 · 291 阅读 · 0 评论 -
c语言力扣第一题两数之和。暴力法
//给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。//你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。//你可以按任意顺序返回答案。//来源:力扣(LeetCode)//链接:https ://leetcode.cn/problems/two-sum//著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。//示例 1://输入:nums = [2,原创 2022-06-20 15:46:14 · 214 阅读 · 0 评论 -
C语言力扣第三题。滑动窗口法
原题描述://给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。////////示例 1:////输入: s = "abcabcbb"// 输出 : 3// 解释 : 因为无重复字符的最长子串是 "abc",所以其长度为 3。//// 示例 2 ://// 输入 : s = "bbbbb"// 输出 : 1// 解释 : 因为无重复字符的最长子串是 "b",所以其长度为 1。//// 示例 3 :////原创 2022-06-21 22:21:59 · 304 阅读 · 0 评论 -
c语言力扣第七题之翻转数字。暴力法
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出: - 321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0来源:力扣(LeetCode)链接:https ://leetcode.cn/problems/reverse-i原创 2022-06-25 22:50:52 · 237 阅读 · 0 评论 -
c语言力扣第二题之链表两数相加。遍历法
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2, 4, 3], l2 = [5, 6, 4]输出:[7, 0, 8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9, 9, 9, 9, 9, 9, 9], l原创 2022-06-24 23:24:14 · 457 阅读 · 0 评论 -
C语言力扣第九题之回文数。两指针数组遍历法
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 - 121 。 从右向左读, 为 121 - 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。来源:力扣(Lee原创 2022-06-27 22:58:15 · 272 阅读 · 0 评论 -
C语言力扣第十五题之三数之和。三指针法
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1, 0, 1, 2, -1, -4]输出:[[-1, -1, 2], [-1, 0, 1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 ...原创 2022-07-02 19:18:02 · 263 阅读 · 0 评论 -
C语言力扣第21题之合并两个有序链表。双指针法
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1, 2, 4], l2 = [1, 3, 4]输出:[1, 1, 2, 3, 4, 4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是[0, 50]- 100 ......原创 2022-07-06 23:35:14 · 331 阅读 · 0 评论 -
c语言力扣第十二题之罗马数字。暴力枚举
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗原创 2022-06-29 22:13:05 · 325 阅读 · 0 评论