刷题必背
六毛的毛
这个作者很懒,什么都没留下…
展开
-
前k个高频元素
输入: nums = [1,1,1,2,2,3], k = 2。给定一个非空的整数数组,返回其中出现频率前 k 高的元素。原创 2024-09-10 15:06:18 · 137 阅读 · 0 评论 -
滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。push时,如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止。pop时,如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作。利用单调队列维护窗口里的值,只需要维护可能成为最大值的值,因此只需要保持队列单调递减。返回滑动窗口中的最大值。原创 2024-09-04 11:39:42 · 209 阅读 · 0 评论 -
逆波兰表达式(后缀表达式)
整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。有效的运算符包括 + , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。利用栈来解决,当检索到运算符时弹出栈顶两个元素进行运算,将结果入栈。根据 逆波兰表示法,求表达式的值。时间复杂度、空间复杂度:O(n)原创 2024-09-03 10:34:17 · 193 阅读 · 0 评论 -
删除字符串中所有相邻重复项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。利用栈存放之前遍历过的元素,若当前元素和栈顶元素一致则删除。最后弹出栈中元素并进行倒序。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。时间复杂度、空间复杂度均为O(n)原创 2024-09-02 17:58:19 · 160 阅读 · 0 评论 -
有效的括号
如果遍历完字符串栈不为空,说明有多余的左括号;如果遍历过程中栈已经为空,说明多余的右括号;遍历过程中发现字符不匹配。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。每遇到一个左括号则把对应右括号压入栈中,遇到右括号时检查栈顶和该右括号是否一致。左括号必须用相同类型的右括号闭合。注意空字符串可被认为是有效字符串。时间复杂度、空间复杂度:O(n)左括号必须以正确的顺序闭合。原创 2024-08-30 11:35:36 · 140 阅读 · 0 评论 -
用栈实现队列
push时将数据放进输入栈,pop时如果输出栈为空,就把进栈数据全部导入,再从输出栈弹出。push(x) – 将一个元素放入队列的尾部。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。pop() – 从队列首部移除元素。需要两个栈,一个输入栈一个输出栈。如果输出栈不为空直接从输出栈弹出。原创 2024-08-27 10:04:11 · 159 阅读 · 0 评论 -
重复的子字符串
本文参考代码随想录给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。移动匹配满足条件的字符串一定由前后相同的子串组成,因此如果用后面的子串做前串。前面的子串做后串,组成的字符串一定和原字符串一样。因此,只需要将两个s拼接在一起,如果中间还有一个s的话,就说明是由重复的字符串组成。在搜索s+s中是否出现s时,要刨除s+s的首字符和尾字符,确保搜索出来的是中间的s。class Solution {public:转载 2024-07-29 11:06:13 · 25 阅读 · 0 评论 -
实现strStr()函数
本文参考实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。KMP字符串匹配:当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。:next数组。用来回退,记录模式串与主串不匹配时,从哪里重新匹配。记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。转载 2024-07-26 14:00:16 · 23 阅读 · 0 评论 -
右旋字符串
本文参考字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。转载 2024-07-25 13:55:08 · 19 阅读 · 0 评论 -
翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。注意:删除空格时如果用erase(),其本身复杂度为O(n),加上一层遍历后复杂度变为O(n^2)转载 2024-07-24 16:38:04 · 18 阅读 · 0 评论 -
删除链表中的倒数第N个节点
用fast移动n歩,然后fast和slow同时移动,直到fast指向末尾,删除slow指向的节点即可。删除链表倒数第N个节点,并返回头结点。时间复杂度、空间复杂度均为O(1)转载 2024-06-24 11:57:38 · 18 阅读 · 0 评论 -
反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。如果剩余字符少于 k 个,则将剩余字符全部反转。在遍历字符串时,每次移动2k。时间复杂度: O(n)空间复杂度: O(1)转载 2024-07-22 11:21:51 · 17 阅读 · 0 评论 -
替换数字问题
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。然后用双指针法从后向前替换数字字符。i指向新长度的末尾,j指向旧长度的末尾。从旧数组从后向前,开始赋值到新数组,将s[j]赋给s[i]遇到数字开始填充number(也是从后向前)首先扩充数组到替换后的大小。转载 2024-07-23 14:08:10 · 23 阅读 · 0 评论 -
反转字符串
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。使用双指针,一个在字符串前面,一个在字符串后面,双指针同时移动,并交换元素。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。转载 2024-07-19 11:30:45 · 15 阅读 · 0 评论 -
四数之和问题
题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。的基础上加一层for循环。固定nums[k] + nums[i],然后用left和right双指针搜索。时间复杂度O(n^3)转载 2024-07-18 11:07:31 · 16 阅读 · 0 评论 -
三数之和问题
本文参考给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?请你找出所有满足条件且不重复的三元组。转载 2024-07-18 10:24:12 · 19 阅读 · 0 评论 -
赎金信拼接
本文参考给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)假设字符串均只有小写字母。转载 2024-07-16 16:09:42 · 15 阅读 · 0 评论 -
四数相加II
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1。时间复杂度:O(n^2)空间复杂度:O(n^2)转载 2024-07-15 13:26:36 · 20 阅读 · 0 评论 -
和为目标值的整数
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。遍历数组时,在map里查找是否有和当前元素匹配的元素,如果有则找到一对符合的值,直接返回。如果没有则把当前元素加入map。本题需要记录遍历过的数组和对应的下标,因此需要用到map。数组中的元素作为key,对应的下标作为value。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。时间复杂度、空间复杂度均为O(1)转载 2024-07-11 10:44:25 · 20 阅读 · 0 评论 -
判断是否为快乐数
快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。会无限循环,即意味着平方和会出现重复。可以用哈希表判断是否有重复数值。如果 n 是快乐数就返回 True;不是,则返回 False。编写一个算法来判断一个数 n 是不是快乐数。时间复杂度、空间复杂度均为O(logn)转载 2024-07-10 11:55:15 · 21 阅读 · 0 评论 -
两个数组的交集
本题没有给定数组的大小,因此不适合用数组做哈希表。使用unordered_set。时间复杂度:O(n+m), m是最后要把 set转成vector。给定两个数组,编写一个函数计算他们的交集。空间复杂度:O(n)转载 2024-07-08 10:28:50 · 133 阅读 · 0 评论 -
有效的字母异位词
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true。遍历字符串s,将s[i] - 'a’所在的元素+1、遍历字符串t,将每个字符相对应的元素再-1。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 2: 输入: s = “rat”, t = “car” 输出: false。定义数组record,大小为26,初始化为0.思路:定义一个数组,记录字符出现的次数。检查record数组是否所有元素都是0。转载 2024-07-05 15:00:53 · 49 阅读 · 1 评论 -
哈希表(散列表)理论
关键码:数组的索引下标。通过下标可以直接访问数组中的元素。哈希表一般用来快速判断某个元素是否在表里。转载 2024-07-03 13:19:12 · 21 阅读 · 0 评论 -
环形链表的入环节点
本文参考给定一个链表,返回入环的第一个节点。若无环则返回null。转载 2024-07-02 15:26:56 · 17 阅读 · 0 评论 -
链表相交起点
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null。求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到和curB末尾对齐的位置。此时比较curA和curB是否相同,不相同则继续比较。转载 2024-06-28 11:17:21 · 14 阅读 · 0 评论 -
两两交换链表中的节点
初始时cur指向虚拟头结点。转载 2024-06-23 17:19:20 · 15 阅读 · 0 评论 -
实现反转链表
本文参考反转一个单链表只需要改变链表指针next的指向,直接实现链表反转,无需定义新链表。转载 2024-05-13 16:12:58 · 25 阅读 · 0 评论 -
设计链表函数
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。get(index):获取链表中第 index 个节点的值。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。转载 2024-05-13 15:21:54 · 23 阅读 · 0 评论 -
移除链表元素
在链表中部的元素直接删除即可,c++需要手动释放空间。但在删除头节点时,针对单链表有两种操作方式。删除链表中等于给定值val的所有节点。时间复杂度:O(n)空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)转载 2024-05-13 13:41:27 · 23 阅读 · 0 评论 -
链表理论基础
/单链表int val;ListNode(int x) : val(x), next(NULL){}//构造函数。转载 2024-05-13 11:24:56 · 17 阅读 · 0 评论 -
螺旋矩阵II
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。每画一条边都要坚持左开右闭或者左闭右开原则。时间复杂度:O(n^2)空间复杂度:O(1)转载 2024-05-10 10:27:40 · 16 阅读 · 0 评论 -
长度最小的子数组
给定一个含有n个整数的数组和正整数s,找出该数组中满足其和>=s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回0.输入:s = 7, nums = [2,3,1,2,4,3]输出:2本文参考。转载 2024-05-09 11:09:52 · 22 阅读 · 0 评论 -
数组移除元素
本文参考给定数组nums和值val,原地移除所有数值等于val的元素,并返回移除后数组的新长度不实用额外的数组空间,必须仅使用O(1)的额外空间并原地修改输入数组元素顺序可以改变,不需要考虑数组中超出新长度后面的元素例如,给定nums = [3,2,2,3],返回新的长度2,并且nums前两个元素均为2。转载 2024-05-06 15:18:21 · 20 阅读 · 0 评论 -
二分查找写法
本文参考给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。转载 2024-04-30 10:48:45 · 19 阅读 · 0 评论 -
数组理论基础
在增删元素时,需要移动其他元素的地址。原创 2024-04-30 09:50:56 · 50 阅读 · 0 评论