
leetcode刷题
文章平均质量分 74
刷题的同时学习相关的知识,做到触类旁通,多点开花,业精于勤,荒于嬉。无他,唯手熟尔!
龙叙
c与cpp、linux为主,励志于嵌入式领域,要注重原理,多动手编程,加油!!!
展开
-
19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?方法:一趟扫描法class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* tmp = head->next; while(tmp && n--) {原创 2021-05-29 13:00:24 · 143 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n文章目录1.题目描述2.方法一:递归1)思路和算法2)正确代码3.方法二:快速乘1.题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句 (A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 100002.方法一:递归1)思路和算法试想一下如果不加限制地使用递归的方法来实现原创 2021-04-22 13:02:25 · 170 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字1.题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 100002.解题思路排序数组中的搜索问题,首先想到 二分法 解决。根据题意,数组可以原创 2021-04-21 21:41:21 · 122 阅读 · 0 评论 -
剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点文章目录1.题目描述2.解题思路3.C++代码1.题目描述输入两个链表,找出它们的第一个公共节点。如下面的两个链表:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA= 2, skipB = 3输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的转载 2021-04-21 20:14:03 · 159 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 I文章目录1.题目描述2.二分查找法(1)解题思路(2)方法一:右边界 - 左边界 - 1(3)方法二:目标值的右边界 - (目标值 - 1)的右边界3.C++代码1.题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数原创 2021-04-21 20:13:31 · 181 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表文章目录1.题目描述2.解题思路3.算法流程4.C++代码1.题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 10002.解题思路根据题目描述, 链表 l1,l2 是递增的,因此容易想到使用双指针l1,l2遍历两链表, 根据l原创 2021-04-21 13:30:26 · 199 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表文章目录题目描述方法一:迭代题目描述反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000方法一:迭代假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。在遍历链表时,将当前节点(curr)的 nex原创 2021-04-13 23:11:52 · 135 阅读 · 0 评论 -
264. 丑数 II
丑数 II文章目录题目描述方法一:最小堆题目描述给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。提示:1 <= n <= 1690方法一:最小堆要得到从小到大的第 nn 个丑数,可以使用最小.原创 2021-04-13 21:17:25 · 324 阅读 · 0 评论 -
224. 基本计算器
224. 基本计算器(困难)答案整理 加深记忆 便于复习!没看懂。。。文章目录题目描述方法:括号展开 + 栈大佬改进版代码题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。示例 1:输入:s = “1 + 1”输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = “(1+(4+5+2)-3)+(6+8)”输出:23提示:1 <= s.length <= 3 * 105s 由数字、’+’、’原创 2021-03-11 17:05:40 · 595 阅读 · 1 评论 -
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数(简单题)没有理解:用字符串模拟数字加法。文章目录题目描述方法一:简单解法(不考虑大数问题)方法二:用字符串模拟数字加法。题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数方法一:简单解法(不考虑大数问题)题目要求打印 “从原创 2021-03-10 13:27:37 · 236 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数答案整理 加深记忆 便于复习!题目描述请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:0000000原创 2021-03-10 11:04:44 · 102 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字答案整理 加深记忆 便于复习!文章目录题目描述方法一:暴力法方法二:二分查找注意事项题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 注意理解旋转数组,这是一类数组,前面讲的是旋转数组是怎么来的,以旋转点为中心,左右两侧分别单增,右侧数组终点元素 ≤ 左侧数组的起点元素。其原创 2021-03-09 23:39:14 · 242 阅读 · 0 评论 -
1047. 删除字符串中的所有相邻重复项
1047. 删除字符串中的所有相邻重复项答案整理 加深记忆 便于复习!文章目录题目描述方法:栈题目描述给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释: 例如,在 “abbaca” 中,我们可以删除 “bb”,由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “a原创 2021-03-09 20:08:58 · 317 阅读 · 0 评论 -
131. 分割回文串
分割回文串答案整理 加深记忆 便于复习!文章目录题目描述方法一:回溯 + 动态规划预处理题目描述给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例 2:输入:s = “a”输出:[[“a”]]提示:1 <= s.length <= 16 s仅由小写英文字母组成方法.原创 2021-03-09 15:41:42 · 351 阅读 · 0 评论 -
关于leetcode上刷题的一些规则与疑惑
不断更新文章目录问题一:什么是额外辅助空间问题一:什么是额外辅助空间问题来源:剑指 Offer 06. 从尾到头打印链表——不借助额外辅助空间/栈热心网友解答:原创 2021-03-05 17:25:42 · 303 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题文章目录题目描述解题思路题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100解题思路此类求多少种可能性 的题目转载 2021-03-05 17:08:18 · 244 阅读 · 0 评论 -
232. 用栈实现队列
232. 用栈实现队列文章目录题目描述方法一:双栈有个基本一样的题目剑指 Offer 09. 用两个栈实现队列题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false原创 2021-03-05 16:18:00 · 242 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列文章目录题目描述方法:双栈题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1]示例原创 2021-03-03 18:46:59 · 124 阅读 · 1 评论 -
338. 比特位计数
比特位计数文章目录题目描述前言方法一:直接计算题目描述给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)。你能进一步完善解法吗?要求在C+.原创 2021-03-03 13:03:42 · 767 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000二叉树相关知识二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解...原创 2021-03-02 21:22:23 · 118 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表文章目录题目描述方法:栈题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000方法:栈...原创 2021-03-02 21:01:16 · 150 阅读 · 0 评论 -
304. 二维区域和检索 - 矩阵不可变
二维区域和检索 - 矩阵不可变文章目录题目描述题目描述给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:提示:你可以假设矩阵不可变。会多次调用 sumRegion 方法。你可以假设 row1 ≤ row2 且 col1 ≤ col2 。...原创 2021-03-02 13:47:34 · 314 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格文章目录题目描述python、java、C++关于string的不同方法一:C++原地修改(字符串知识内容里的双指针法)python一行代码附关键词:双指针法、倒序修改题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000python、java、C++关于string的不同在原创 2021-03-02 13:36:30 · 149 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列文章目录斐波那契数列相关介绍题目描述法一:递归法非递归解法斐波那契数列相关介绍一个小小的数列包含这么多知识,今天长见识了斐波那契数列取余是否有规律?斐波那契数列规律总结斐波那契数列规律探索题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1。斐波那契数列由原创 2021-03-02 12:25:39 · 140 阅读 · 0 评论 -
leetcode-剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找文章目录题目描述方法一:暴力法方法二:线性法题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:给定 target = 5,返回 true。给定 target = 20,返回 false。方法一:暴力法如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的每一个元素,原创 2021-03-01 20:51:16 · 334 阅读 · 0 评论 -
leetcode-303. 区域和检索 - 数组不可变
C语言数组作为函数参数文章目录一:数组元素作为函数的实参二:数组名作为函数的实参关于数组作为函数参数调用的讨论*将函数参数定义为指针的形式关于函数定义的参数表的讨论三:二维数组名作为函数参数*将函数参数定义为指针的形式(1)第一维是指针,第二维是数组(2)二维指针并不能达到传递普通二维数组的效果(3)只有动态申请的二维数组才可通过二维指针作为函数参数传递获取二维数组的行和列四:更高维数组作为函数参数同二维数组类似五:参考文档一:数组元素作为函数的实参数组元素就是变量,与普通变量没有区别,将数组元素传送原创 2021-03-01 14:01:52 · 353 阅读 · 1 评论 -
剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字文章目录题目描述方法一:原地置换法方法二:哈希表 / Set哈希map集合set题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3限制:2 <= n <= 100000方法一:原地置换原创 2021-02-26 15:37:24 · 269 阅读 · 1 评论 -
20. 有效的括号
20. 有效的括号文章目录题目描述解答方法:栈c++代码python3代码c代码题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。解答方法:栈判断括号的有效性可以使用「栈」这一数据结构来解决。我们遍历给定的字符串 s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将原创 2021-02-10 23:02:32 · 383 阅读 · 3 评论 -
21. 合并两个有序链表
21. 合并两个有序链表文章目录题目描述方法一:迭代方法二:递归题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:迭代思路我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。算法首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我转载 2021-02-10 22:28:18 · 2011 阅读 · 0 评论 -
14. 最长公共前缀
文章目录第一次运用到的函数substr方法一:横向扫描方法二:纵向扫描方法三:分治法方法四:二分查找14. 最长公共前缀本题都用c++实现代码均来自leetcode题解,这里只作为个人学习记录,多输入几遍代码,孰能生巧第一次运用到的函数substr函数原型:basic_string substr(size_type _Off = 0,size_type _Count = npos) const;参数_Off:所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0。_Count原创 2021-02-07 23:36:10 · 492 阅读 · 0 评论 -
4-2两数相加
文章目录题目描述2.两数相加题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807....原创 2021-01-22 00:14:18 · 339 阅读 · 1 评论 -
3-38外观数列
38.外观数列leetcode链接给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一原创 2020-12-31 14:13:12 · 154 阅读 · 0 评论 -
2-35搜索插入位置
文章目录题目描述题目描述35.搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。...原创 2020-12-30 19:12:01 · 330 阅读 · 0 评论 -
1-27移除元素
文章目录题目描述C++C附题目描述27.移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。C++class Solution {public: int removeElement(vector<int>& nums, int val) {原创 2020-12-30 19:02:36 · 92 阅读 · 0 评论