![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题
立扣上的题
xiaoming1999
这个作者很懒,什么都没留下…
展开
-
LeetCode第21天--有效括号
题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:输入:s = "()" 输出:true输入:s = "([)]"输出:false解题思路:看到这种题,我们需要用栈的先进后出的思想来解决,当目前的符号是'('、‘{’、'[',我们只需要让这些符号入栈,并将栈顶做标记,当出现反括号时,我们需要将出现的符号和栈顶符号比较...原创 2022-03-26 11:55:30 · 1282 阅读 · 0 评论 -
LeetCode第20天--相交链表
题目描述给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。示例:输出:8输出:2解题思路:首先将两个链表遍历一遍,并且统计它们的长度,求出两个链表的长度差,让长的链表先走长度差步,然后两个链表一起走并判断它们的地址是否相等即可。代码实现:struct ListNode *getIntersectionNode(struct ListNode *headA, struc...原创 2022-03-19 20:29:39 · 784 阅读 · 0 评论 -
LeetCode第19天--链表分割
题目描述现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。解题思路:首先,先定义两个新的头节点,分别用来保存小于x的节点和不小于x的节点,遍历原链表,当前节点小于x的时候,将它放在定义的新的节点后,当前节点不小于x的时候,将它放在定义的另一个新的节点后。最后将全部小节点的尾链接上大节点的头即可。画图分析:代码实现:ListNode* partition(ListNo.原创 2022-03-19 16:53:34 · 924 阅读 · 0 评论 -
LeetCode第18天--链表中倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。示例输入:1,{1,2,3,4,5}返回值:{5}解题思路:首先定义两个指针变量,同时指向head,让其中一个指针先走k步,接下来让两个指针同时走,直到快指针指向的为空即可停止,慢指针所指向的值即为倒数第k个节点。代码实现struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ){ struct ListNode *fast = p..原创 2022-03-19 10:27:10 · 994 阅读 · 0 评论 -
LeetCode第17天--链表的中间结点
问题描述给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例输入:[1,2,3,4,5] 输出:返回的结点值为 3输入:[1,2,3,4,5,6] 输出:该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点 4解题思路一:首先,先统计出链表中节点的个数,然后,从头节点进行遍历,遍历到节点总数的一半即可。代码实现:struct ListNode* middleNode(struct ListNode* head...原创 2022-03-17 15:23:04 · 230 阅读 · 0 评论 -
LeetCode第16天--反转链表
问题描述给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]输入:head = []输出:[]解题思路 :我们需要三个指针变量,首先prev指向NULL,cur指向head,tmp指向cur->next,tmp在这里的作用及就是保存cur的下一个节点。我们每次操作只需要变换cur指针的指向,使它指向前边的节点即可,前边的节点用p...原创 2022-03-16 16:44:05 · 676 阅读 · 0 评论 -
LeetCode第15天--移除链表元素
移除链表元素问题描述给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。示例输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]输入:head = [], val = 1输出:[]输入:head = [7,7,7,7], val = 7输出:[]解题思路:一共分为三种情况第一种是正常情况:定义两个指针变量,cur=head头节点,p...原创 2022-03-15 15:26:05 · 1295 阅读 · 0 评论 -
LeetCode第14天--移除元素
移除元素问题描述给你一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。示例输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,4,0,3]解题思想:设置两个变量i,j。当i指向的值...原创 2022-03-13 23:07:47 · 448 阅读 · 0 评论 -
LeetCode第13天--轮转数组
轮转数组问题描述给你一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。示例输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释:向右轮转 1 步...原创 2022-03-13 20:52:09 · 80 阅读 · 0 评论 -
LeetCode第12天--数组中数字出现的次数
数组中数字出现的次数问题描述一个整型数组nums里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]解题思路用异或方法进行解决,我们都知道要是有一个数只出现一次,根据异或的原理,那么我们将所有数全部异或,则结果就为出现一次的数...原创 2022-03-13 18:58:33 · 500 阅读 · 0 评论 -
LeetCode第11天--消失的数字
目录消失的数字解题思路:等差数列法异或方法消失的数字问题描述:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例:输入:[3,0,1]输出:2输入:[9,6,4,2,3,5,7,0,1]输出:8解题思路:等差数列法用等差数列公式S=(n(n+1))/2。将前n个数的和用等差数列公式计算出,然后用总合减去数组中出现的每一个数,结果即为缺失的数字。代码实现如下:int...原创 2022-03-13 18:30:41 · 1040 阅读 · 0 评论 -
LeetCode第十天--实现strstr()
问题描述:实现strStr()函数。给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。当needle是空字符串时我们应当返回 0。示例:输入:haystack = "hello", needle = "ll"输出:2输入:haystack = "aaaaa", needle = "bba"输出:-1输入:haystack = "", needl...原创 2021-12-16 17:49:07 · 457 阅读 · 0 评论 -
LeetCode第九天--移除元素
题目描述:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返...原创 2021-12-15 19:53:08 · 63 阅读 · 0 评论 -
LeetCode第八天--删除有序数组中的重复项
题目描述:给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。输入:nums = [0,0,1,1,1,2,2,3,3,4]输出:5, .原创 2021-12-09 09:59:24 · 307 阅读 · 0 评论 -
LeetCode第七天--合并两个有序链表
题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]解题思路:解决这个问题,我们首先要重新定义一个指针,判断list1和list2所指向的节点的值的大小,比较小的那个就将其链接在定义指针的后边,依次判断完两个指针,当一个指针指向nullptr的时候,直接将另一个指针全部链接在定义指针的后边即可。代码实现如下:cla...原创 2021-12-08 08:21:17 · 283 阅读 · 0 评论 -
LeetCode第六天--有效括号
题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:输入:s = "()[]{}"输出:true输入:s = "([)]"输出:false解题思路:在解决这个问题的时候,我们通常要引入栈来辅助我们解决问题。栈的特性是先进后出,最后进来的数永远是在栈顶的,也是我们可以取到的数,正好就和有效括号这个问题相适应。解题思路如下图:...原创 2021-12-07 15:33:36 · 386 阅读 · 0 评论 -
LeetCode第五天--最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。输入:strs = ["flower","flow","flight"]输出:"fl"输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。解题思路:首先我们对每一个字符串进行遍历,判断所有字符对应的下标字符是否相等,如果相等,则继续遍历,如果不相等则直接返回第一个字符从起始位置到遍历不相等结束的位置即可,返回的就是我们最长公共前缀。..原创 2021-12-06 09:26:23 · 49 阅读 · 0 评论 -
LeetCode第四天--罗马数字转整数
题目描述:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1 。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而...原创 2021-12-05 10:08:18 · 121 阅读 · 0 评论 -
LeetCode第三天--回文数
题目描述:给一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是输入:x = 121输出:true输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。解题思路:看到这个题,我们可以先判断这个数是大于0还是小于0,因为从回文数定义来看,小于0的数不可能是回文数,所以我们只用判.原创 2021-12-04 10:29:01 · 711 阅读 · 0 评论 -
LeetCode第二天--整数反转
题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例:输入:x = 123输出:321输入:x = -123输出:-321解题思路:看到这个题,我们可以先将数字进行反转,反转很好实现,每次取余就可以,如下图进行分析:如果不考虑溢出的问题,这个题是很容易就解出来的,但是由于考虑溢出问题...原创 2021-12-03 09:17:39 · 172 阅读 · 0 评论 -
LeetCode第一天--两数之和
题目描述:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。解题思路:一组数据设置两个变量,首先先从第一个数据开始,后边的数据...原创 2021-12-02 17:04:23 · 63 阅读 · 0 评论