
代码随想录
文章平均质量分 69
是小白_鸭
方向 + 方法 + 努力 + 坚持
展开
-
7.8 接雨水
42 接雨水题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路具体代码实现(C++) (双指针法)模型(知识点)题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示原创 2022-01-30 22:59:38 · 279 阅读 · 1 评论 -
7.7 前 K 个高频元素
347 前 K 个高频元素题目给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。思路具体代码实现(C++)模型(知识点)题目给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.l原创 2022-01-29 23:47:50 · 690 阅读 · 0 评论 -
7.6 滑动窗口最大值
239 滑动窗口最大值题目思路(建议先看示例)具体代码实现(Java)模型(知识点)题目来源:力扣(LeetCode)链接: link.思路(建议先看示例)遍历数组,将 数 存放在双向队列中,并用 L,R 来标记窗口的左边界和右边界。队列中保存的并不是真的 数,而是该数值对应的数组下标位置,并且数组中的数要从大到小排序。如果当前遍历的数比队尾的值大,则需要弹出队尾值,直到队列重新满足从大到小的要求。刚开始遍历时,L 和 R 都为 0,有一个形成窗口的过程,此过程没有最大值,L 不动,R 向右移。原创 2022-01-28 23:39:30 · 120 阅读 · 0 评论 -
7.5 逆波兰表达式求值
150 逆波兰表达式求值题目根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。思路具体代码实现(C++)模型(知识点)题目根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波原创 2022-01-27 23:51:57 · 1324 阅读 · 0 评论 -
7.4 有效的括号
20 有效的括号题目给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。思路具体代码实现(C++)模型(知识点)题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:f原创 2022-01-26 23:28:30 · 615 阅读 · 0 评论 -
7.3 用队列实现栈
225 用队列实现栈题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。思路具体代码实现(C++) (用一个队列实现栈)模型(知识点)题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。bo原创 2022-01-26 21:16:47 · 597 阅读 · 0 评论 -
7.2 用栈实现队列
232 用栈实现队列题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):思路具体代码实现(C++)模型(知识点)题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如原创 2022-01-26 20:32:11 · 352 阅读 · 0 评论 -
6.7 重复的子字符串
459 重复的子字符串题目给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。思路具体代码实现(C++)模型(知识点)题目给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False示例 3:输入: “abcabcabc原创 2022-01-25 23:52:09 · 412 阅读 · 0 评论 -
6.6 实现 strStr() (KMP算法)
28 实现 strStr题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。思路具体代码实现(C++)模型(知识点)题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当原创 2022-01-25 23:09:33 · 137 阅读 · 0 评论 -
6.4 翻转字符串里的单词
151 翻转字符串里的单词题目给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。思路具体代码实现(C++)模型(知识点)题目给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:输入字符串 s 可以在前面、后面原创 2022-01-24 22:07:25 · 170 阅读 · 0 评论 -
6.3 反转字符串 II
541 反转字符串 II题目给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。思路具体代码实现(C++)模型(知识点)题目给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于原创 2022-01-23 23:45:43 · 669 阅读 · 0 评论 -
6.2 反转字符串
344 反转字符串题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。思路具体代码实现(C++)模型(知识点)题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“原创 2022-01-23 23:40:18 · 123 阅读 · 0 评论 -
5.7 四数之和
18 四数之和题目给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < n , a、b、c 和 d 互不相同 , nums[a] + nums[b] + nums[c] + nums[d] == target , 你可以按 任意顺序 返回答案 。思路具体代码实现(C原创 2022-01-22 22:29:22 · 430 阅读 · 0 评论 -
5.6 三数之和
15 三数之和题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。思路(双指针法)具体代码实现(C++)题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:原创 2022-01-22 20:07:20 · 145 阅读 · 0 评论 -
5.5 四数相加
xx xxx题目思路具体代码实现(C++)题目来源:力扣(LeetCode)链接: link.思路首先定义 一个 unordered_map,key 放 nums1 和 nums2 两数之和,value 放 nums1 和 nums2 两数之和出现的次数。遍历 nums1 和 nums2 数组,统计两个数组元素之和,和出现的次数,放到 map 中。定义 int 变量 count,用来统计 a+b+c+d = 0 出现的次数。在遍历 nums3 和 nums4 数组,找到如果 0-(c+d原创 2022-01-21 23:13:04 · 746 阅读 · 0 评论 -
5.4 两数之和
1 两数之和题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。思路具体代码实现(C++)模型(知识点)题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组原创 2022-01-21 21:56:36 · 110 阅读 · 0 评论 -
5.3 两个数组的交集
349 两个数组的交集题目给定两个数组,编写一个函数来计算它们的交集。思路具体代码实现(C++)模型(知识点)题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。来源:力扣(LeetCode)链接: link.思路用原创 2022-01-21 20:39:11 · 567 阅读 · 0 评论 -
5.2 有效的字母异位词
242 有效的字母异位词题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。思路具体代码实现(C++)模型(知识点)题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true提示:1原创 2022-01-21 19:50:57 · 569 阅读 · 0 评论 -
4.6 环形链表 II
142 环形链表 II题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。思路具体代码实现(C++)模型(知识点)题目给定一个链表,返回链表开始入环的第一个节点。原创 2022-01-20 22:45:31 · 315 阅读 · 0 评论 -
4.5 删除链表的倒数第 N 个结点
19 删除链表的倒数第 N 个结点题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。思路具体代码实现(C++)模型(知识点)题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]来源:力扣(LeetCode)链接: link.思路创建头节点 pNew,并定义 slow,fast 指向 pNew要删除倒数第 n 个,就要找到倒数第 n + 1 个,即 slow 遍原创 2022-01-20 21:50:10 · 384 阅读 · 0 评论 -
4.4 反转链表
206 反转链表题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路具体代码实现(C++)模型(知识点)题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000来源:力扣(LeetCode)链接: link.思路定义 cur 指向首节点, pre 是它的前节点原创 2022-01-20 21:10:07 · 195 阅读 · 0 评论 -
4.3 设计链表
707 设计链表题目在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 inde原创 2022-01-19 16:13:31 · 963 阅读 · 0 评论 -
4.2 移除链表元素
203 移除链表元素题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。思路具体代码实现(C++)题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]提示:列表中的节点数目在范围 [0, 10^4] 内1原创 2022-01-19 10:10:46 · 491 阅读 · 0 评论 -
3.5 螺旋矩阵 II
59 螺旋矩阵 II题目给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。思路具体代码实现(C++)模型(知识点)题目给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]提示:1 <= n <= 20来源:力扣(LeetCode)链接: li原创 2022-01-18 00:07:21 · 489 阅读 · 0 评论 -
3.4 长度最小的子数组
209 长度最小的子数组题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。思路一(暴力解法)思路一具体代码实现(C++)优化前(利用数组 len[] 来存储子数组长)优化后(用三元运算符更新子数组长)思路二(滑动窗口法)思路二具体代码实现(C++)模型(知识点)题目给定一个含有 n 个正整数的原创 2022-01-17 21:31:37 · 780 阅读 · 0 评论 -
3.3 移除元素
27 移除元素题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。思路一(暴力解法)思路一的具体代码实现(C++)思路二(双指针法)思路二的具体代码实现(C++)模型(知识点)题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要原创 2022-01-17 17:44:26 · 214 阅读 · 0 评论 -
3.2 二分查找
704 二分查找题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。思路具体代码实现(C++)模型(知识点)题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出:原创 2022-01-17 13:57:00 · 888 阅读 · 0 评论