LeetCode
文章平均质量分 50
发表一些LeetCode的思路和题解
恒天1020
我很懒,还没有简介。
展开
-
LeetCode 203. 移除链表元素 (C语言)
LeetCode 203. 移除链表元素1.题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。2.思路本题的大致思路是,设置两个指针p1,p2,初始分别指向头节点以及头节点的下一个节点,然后依次遍历链表,如果遇到相等的值,就删除p2指向的节点,然后p2向后移动,p1保持不动,直到p1与p2所指节点的值不同,此时p1,p2均向后移动。但是由题目样例的示例三我们可以看到,如果一个链表的n个节点的值均相等原创 2021-11-25 22:32:52 · 795 阅读 · 0 评论 -
LeetCode 142. 环形链表Ⅱ (C语言)
LeetCode 142. 环形链表1.题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。来源:力扣(LeetCode)链接:https://leet原创 2021-11-25 22:17:04 · 157 阅读 · 0 评论 -
LeetCode 141. 环形链表 (C语言)(暴力&快慢指针)
LeetCode 141. 环形链表1.题目描述给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)链接:原创 2021-11-25 19:46:07 · 631 阅读 · 0 评论 -
LeetCode 83.删除排序链表中的重复元素 (C语言)
LeetCode 83.删除排序链表中的重复元素 (C语言)1. 题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。2. 思路从头到尾遍历链表,如果当前结点的值与下一个结点的值相等,我们就删除下一个节点,如果不相等,继续向下遍历,直到链表的末尾。因为需要用到下一个节点的数值,所以需要两个指针。我们设指针p1指向头节点的下一个节点,p2指向头节点,判断p1与p2对应的值是否相等,如果相等,就删除掉p原创 2021-11-25 00:15:11 · 1002 阅读 · 0 评论 -
LeetCode 946. 验证栈序列 (C语言)
946. 验证栈序列一、题目描述二、解题思路三、代码一、题目描述二、解题思路这是一道验证栈序列的题,我们需要先创建一个空栈来模拟所给的入栈和出栈序列是否正确。对于入栈序列pushed数组,我们依次将其入栈。每入栈一个元素,我们就和popped数组的当前首元素进行比较,如果入栈的元素与出栈序列的首元素相等的话,就将该元素出栈,并更新出栈序列的首元素。然后再比较现在栈顶的元素是否与更新后的出栈序列的首元素相等,如果相等就继续出栈,直到栈为空或者不相等为止。用while循环来实现该步骤。最后判断栈原创 2021-06-20 13:42:27 · 468 阅读 · 0 评论 -
LeetCode 剑指 Offer 59 - II. 队列的最大值 (C语言)
LeetCode 剑指 Offer 59 - II. 队列的最大值一、题目描述二、解题思路三、AC代码一、题目描述二、解题思路本题顾名思义要使用队列进行求解,定义队列为Q,头指针为front,尾指针为rear。若为max_value操作,我们需要对当前队列进行遍历,找到并返回最大值。如果队列为空,则返回-1.若为push_back操作,我们需要让元素从队尾入队,同时尾指针rear后移动一位。若为pop_front操作,我们需要返回当前队列的首元素,同时front指针后移一位。如果当前队列为空原创 2021-05-31 16:59:30 · 182 阅读 · 0 评论 -
LeetCode剑指offer09.用两个栈实现队列(栈)(队列)(C语言两解)
LeeiCode剑指offer09.用两个栈实现队列一、题目描述二、解题思路三、AC代码一、题目描述二、解题思路方法一: 这道题最显而易见的思路就是如题目所言,用两个栈结构来实现队列这种先进先出的结构。我们先定义两个队列是s1,s2,然后每当遇到在队尾添加元素的命令时,就将数据放入栈s1中,每当遇到删除并返回队首的元素时进行判断:1、若s1为空,s2为空,则返回-12、若s1不为空,s2位空,将s1中的元素依次全部放入栈s2中,并返回s2的栈顶元素。3.、若s1为空,s2不为空 或者 s1原创 2021-05-31 16:28:05 · 476 阅读 · 0 评论 -
LeetCode 剑指 Offer 15. 二进制中1的个数(C语言)(位运算)
LeetCode 剑指Offer 15.二进制中1的个数一、题目描述二、解题思路三、AC代码一、题目描述二、解题思路这个题中函数的输入n被定义为一个32位的二进制数,这在C语言中是无法直接用变量输入表示二进制数的,只能用字符数组进行存储。这里我们只需要把n当做二进制数处理就行,不用考虑它是如何实现的。这里需要提到两个关于二进制的知识点:(1)一个二进制数n和1进行与运算,若结果为1,则表示n的最后一位是1,若结果为0,则表示n的最后一位是0。(2)’>>’ 是右移运算,对二进制原创 2021-05-23 22:15:26 · 195 阅读 · 0 评论 -
LeetCode 20.有效的括号(C语言)(栈)
LeetCode 20.有效的括号一、题目描述二、解题思路三、ac代码一、题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5:原创 2021-05-20 12:01:03 · 303 阅读 · 0 评论 -
LeetCode 1021.删除最外层的括号(C语言)
这LeetCode 1021.删除最外层的括号一、题目描述二、解题思路三、ac代码一、题目描述有效括号字符串为空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括号字符串。如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。给出一个非空有效字符串 S,考虑将其原创 2021-05-19 19:58:14 · 254 阅读 · 0 评论 -
LeetCode 160.相交链表(C语言)(双指针法)
相交链表1.题目描述2.思路3.代码1.题目描述值得注意的是,除了输入的两个链表,这里可以不用理会输入示例中的其他内容,我也不知道这些东西有什么用。2.思路双指针法,顾名思义就是设置两个指针p1,p2分别从headA和headB开始,同时依次往下走,当某一个指针走到该链表的末尾时,将该指针重新指向另一条链表的开端,为了方便理解,我画了一个图:由于headA与headB虽然各自长度不同,但它们的长度之和是恒定的,故p1,p2终会相遇!3.代码/** * Definition for原创 2021-05-17 22:31:27 · 240 阅读 · 0 评论 -
LeetCode122.买卖股票的最佳时机 II(C语言)
LeetCode122.买卖股票的最佳时机II一. 题目描述二. 解题思路三. ac代码一. 题目描述二. 解题思路要求最大的利润,我们就需要对每一步实时更新利润。我们将prices数组的第一个元素设为最低价格,从数组的第2个元素开始遍历,若当前元素小于最低价格则将最低价格更新为当前元素,若当前元素高于最新价格,则将这一步利润的累加到总利润中,也将当前价格设为最低价格,因为这样的话,如果下一个价格也高于最低价格,对利润并无影响。如果下一个价格低于最低价格则最低价格又会更新,对结果并无影响。三原创 2021-04-25 20:54:54 · 227 阅读 · 0 评论 -
LeetCode 121.买卖股票的最佳时机(C语言)
LeetCode 121.买卖股票的最佳时一、题目描述二、实现思路三、ac代码一、题目描述二、实现思路先令最低价格等于一个很大的值,最大利润为0遍历数组,最大利润等于 <上一步最大利润>与<数组中第i个元素 - 最低价格> 中的较大值,这样当遍历第一个元素时,最大利润仍为0 而遍历后面的元素,则可以正确表示最大利润,我觉得这个思路很巧妙最低价格等于 <当前元素> 与 <上一个最低价格中> 中的较低值这里我手写了题目描述中输入样例1的代码运行过原创 2021-04-18 22:24:26 · 336 阅读 · 0 评论 -
LeetCode 1544. 整理字符串(C语言)
LeetCode 1047. 整理字符串文章目录:LeetCode 1047. 整理字符串一. 题目描述二. 解题思路三. ac代码一. 题目描述二. 解题思路这道题与之前的 LeetCode 1047删除字符串中的所有相邻重复项解法十分类似,都是利用数组模拟实现栈进行解题。可以参考一下LeetCode 1047.删除字符串中的所有相邻重复项主要思想就是将s中的元素从第一个开始,依次放入栈stack中(即遍历s),每一次比较栈顶元素是否与当前s的首元素互为大小写(即栈顶元素的ascll值±3原创 2021-04-12 00:33:47 · 357 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表 (C语言)
LeetCode 21. 合并两个有序链表一. 题目二. 思路这道题我是用迭代法完成的。先设置一个哑结点,当做最终结果的第一个结点,然后不断将两个链表的结点按从小到大的顺序连接在哑结点的后面,我们最后直接返回哑结点的next结点即可。哑结点的作用是不需要考虑用哪个链表的第一个元素作为结果的首元素。之后设置一个移动的pMove指针,pMove初始指向哑结点,之后指向每次比较的两个结点中较小的结点,连接在哑结点的后面。p1,p2分别指向两个链表的表头,当进行完一次比较后,p指针和pMove指针均向原创 2021-04-07 23:35:50 · 236 阅读 · 0 评论 -
LeetCode 1047. 删除字符串中的所有相邻重复项 (C语言)
LeetCode 1047. 删除字符串中的所有相邻重复项 (C语言)一. 题目二. 思路这道题很明显需要用到栈这个数据结构,我们可以用数组来模拟实现栈,top为栈顶指针,当top = -1时表示栈为空,当栈中有一个元素时, top = 0。从头依次取出S中的字符放入栈中,若栈顶元素与S的当前首元素相同,则删除,若不同则继续放入栈中成为新的栈顶元素,直到S为空,返回栈中元素即可。三. 代码char * removeDuplicates(char * S){ int len = strle原创 2021-03-30 23:40:21 · 724 阅读 · 0 评论 -
LeetCode 66. 加一 (C语言)
LeetCode 66. 加一 (C语言)一. 题目二. 思路输入的数组分为两种情况,第一种是+1之后数组的长度不发生改变,只需要从后往前遍历,直到遇到第一个不为9的数字+1,这个数字后面可能有n个连续的9(n可以为0),将他们全面改写为0即可。第二种是数组的所有元素都为9,+1之后数组的长度比原来多一个,此时只需要开一个长度为digitsSize+1的数组,将第一个元素赋值为1 其余均赋为0输出即可。三.代码int* plusOne(int* digits, int digitsSize, i原创 2021-03-30 22:28:10 · 202 阅读 · 0 评论 -
LeetCode 剑指 Offer 22. 链表中倒数第k个节点 (C语言)
LeetCode 剑指 Offer 22. 链表中倒数第k个节点 (C语言)一. 题目二. 思路有两种思路:1. 先遍历一遍列表,得到整个链表的长度,然后算出倒数第k个元素是正着数第一个元素,然后该结点即可,代码包含两次循环2. 设置两个指针,先让第一个指针往前走,当第一个指针走过k个距离之后,第二个指针开始走,这样当第一个指针走到尾结点时,第二个指针刚好走到倒数第k个结点,返回该结点即可,代码只有一次循环,速度更快三. 代码代码1:struct ListNode* getKthFrom原创 2021-03-30 21:02:49 · 173 阅读 · 0 评论 -
LeetCode 35.搜索插入位置 (C语言)
LeetCode 35.搜索插入位置 (C语言)一. 题目二. 思路依次遍历数组,如果数组中有目标值,就输出其下标。若没有,则在第一个大于目标值之前插入数组,即目标值插入的位置为第一个大于该目标值的数的下标。三. 代码int searchInsert(int* nums, int numsSize, int target){ for (int i = 0;i < numsSize; i ++ ) { if (nums[i] == target || nums[i]原创 2021-03-30 20:47:39 · 80 阅读 · 0 评论 -
LeetCode 14 最长公共前缀 (C语言)
LeetCode 14 最长公共前缀 (C语言)一. 题目二. 思路纵向比较,看所有字符串的第 i 个字符是否一致,若一致就比较下一个字符,直到出现不一致时,结束比较,返回之前一致的字符串。三.代码char * longestCommonPrefix(char ** strs, int strsSize){ /*(tip 1)*/ int count = 0; if (strsSize == 0) return ""; // 若为空字符,直接返回"" if原创 2021-03-30 20:32:24 · 281 阅读 · 0 评论 -
LeetCode 628.三个数的最大乘积(C语言)
力扣628–三个数的最大乘积(C语言)思路:要求最大乘积,就需要先给数组中的元素排序,找出最大的元素,题目中数组元素个数最大为10的4次方,排序推荐用时间复杂度较低的快排或者桶排,不要用冒泡(因为我用了,没过-。-)。刚开始没有思路,可以先对数组中的元素进行分类,分别算出每种情况下的最大值。如下面代码:long ans,ans1,ans2;if(numsSize == 3) { ans = nums[0]*nums[1]*nums[2]; return ans;// 全为正原创 2021-01-28 23:47:38 · 840 阅读 · 0 评论