![](https://img-blog.csdnimg.cn/8fa8cdae8d2442a0bcb9bc36e7130ee4.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题(散装的题目)
文章平均质量分 70
主要以leetcode和牛客的刷题为主,这个专栏一般是散装的题目,如果是某一整个部分的题目,会单独开辟一个专栏
桜キャンドル淵
凑个整,就1024吧
展开
-
【王道数据结构】【chapter2线性表】【P43t13】
设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prior(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。原创 2024-01-27 11:12:24 · 374 阅读 · 0 评论 -
【ACWING】【Dijkstra】【849Dijkstra求最短路】
接下来 m行每行包含三个整数 x,y,z,表示存在一条从点 x到点 y的有向边,边长为 z。请你求出 1号点到 n号点的最短距离,如果无法从 1号点走到 n号点,则输出 −1。给定一个 n个点 m条边的有向图,图中可能存在重边和自环,所有边权均为正值。1≤n≤500,1≤m≤105,图中涉及边长均不超过10000。输出一个整数,表示 1号点到 n号点的最短距离。如果路径不存在,则输出 −1。第一行包含整数 n 和 m。原创 2023-01-01 20:16:37 · 100 阅读 · 0 评论 -
C++【LRU】
因为我们的磁盘->内存->高速缓存->cpu之间的速度不同,所以我们设置了缓存缓存空间满了之后,更新数据,我要进入,谁出去呢?LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。,将最近最少被使用的算法替换出去。(包括读和写)原创 2022-12-23 09:33:38 · 733 阅读 · 0 评论 -
C++【背包问题】【求正数数组的最小不可组成和】
这里的大小为10的背包是可以将5放进去的,然后到9的时候,我们发现我们的5没办法放进去,我们就先假设5放入了背包空间为9的背包,然后我们还剩下4个空间,然后我们先要知道4个空间的背包的最大负重是多少,我们查找上一轮的放入,我们观察到空间为4的背包最多能放空间大小为3的物品,然后我们本轮中大小为9的背包我们最多能放3+5也就是8的空间大小,比我们上一轮的5更大,所以我们更新容量为9的背包最大负重为5,以此类推,更新我们的最大负重。由于我们需要找到最小的不可以被组成的数字,所以我们从2-10构建9个背包。原创 2022-11-20 21:12:38 · 105 阅读 · 0 评论 -
【牛客】【查找两个字符串a,b中的最长公共子串】【动态规划】
然后我们发现我们的j到4位置,指向j-1的位置的c的时候是可以和我们的i-1指向的c匹配上的。然后我们发现我们的j到5位置,指向j-1的位置的d的时候是可以和我们的i-1指向的c匹配上的。然后我们发现我们的j到6位置,指向j-1的位置的e的时候是可以和我们的i-1指向的c匹配上的。然后我们发现我们的j到7位置,指向j-1的位置的f的时候是可以和我们的i-1指向的c匹配上的。若有多个,输出在较短串中最先出现的那个。然后我们的i++,i-1所指向的是g,我们的j是找不到匹配的,我们的搜索就结束了。原创 2022-11-08 22:04:35 · 714 阅读 · 1 评论 -
【牛客】【字符串通配符】
来源:牛客网问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求:实现如下2个通配符:*:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)?:匹配1个字符注意:匹配时不区分大小写。输入:通配符表达式;一组字符串。输出:返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false数据范围:字符串长度:1≤s≤100 1≤s≤100。原创 2022-10-30 20:16:12 · 144 阅读 · 0 评论 -
【牛客】【杨辉三角的变形】
来源:牛客网以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。数据范围: 1≤n≤109 1≤n≤109输入一个int整数输出返回的int值示例1。原创 2022-10-29 22:29:15 · 188 阅读 · 0 评论 -
【LeetCode】【两个数组的交集】
给定两个数组 nums1 和 nums2 ,返回 它们的交集。输出结果中的每个元素一定是 唯一 的。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]1.两个指针指向的元素小的就是差集(因为我另外一个集合中找不到这个小的数据了)输入:nums1 = [1,2,2,1], nums2 = [2,2]3.只要有一个指针走到头了,那就结束了。2.相等的就是交集,同时++往后走。1.两个指针指向的元素,小的++解释:[4,9] 也是可通过的。然后元素小的指针向后++原创 2022-10-29 12:54:29 · 534 阅读 · 0 评论 -
【LeetCode】【前K个高频单词】
输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4。输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2。解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,输出: ["the", "is", "sunny", "day"]注意,按字母顺序 "i" 在 "love" 之前。原创 2022-10-29 11:36:32 · 854 阅读 · 0 评论 -
【牛客】【扑克牌的大小】
来源:牛客网扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。原创 2022-10-29 08:57:53 · 343 阅读 · 0 评论 -
【C++】【LeetCode】【二叉树的前序、中序、后序遍历】【递归+非递归】
默认情况下,一个线程的栈空间大小为8MB,当递归的深度太深,我们的程序就容易崩溃如果递归的深度太深,栈空间不大,那么程序容易崩溃改成非递归1.改成循环(比方说斐波那契)2.通过栈改成循环为什么递归会空间溢出,非递归不会空间溢出?1.如果是循环的话,形成迭代,消耗的空间很可能是0(1)2.如果使用的是通过栈来改成循环的话,我们栈的开辟的空间在内存的堆区(内存中栈的空间不大,但是堆的空间很大,几乎不存在空间溢出的问题)所以这里我们将递归的遍历改成非递归。原创 2022-10-28 22:41:12 · 744 阅读 · 0 评论 -
【牛客】【幸运的袋子】
来源:牛客网一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。第一行输入一个正整数n(n ≤ 1000)原创 2022-10-28 09:10:22 · 141 阅读 · 0 评论 -
【LeetCode】【从前序与中序遍历序列构造二叉树】
然后我们看preoder中的9的右边,是20,也就是20是我们3的右子树的根,然后我们从inoder中知道20左边的15是我们20的左子树,20的右边的7是我们20的右子树。给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]原创 2022-10-24 22:28:37 · 521 阅读 · 2 评论 -
【牛客】【搜索二叉树与双向链表】
数据范围:输入二叉树的节点数 0≤n≤10000≤n≤1000,二叉树中每个节点的值 0≤val≤10000≤val≤1000。或者我们可以直接将prev的right指针指向prev,也就是今天的我们穿越回昨天,就知道了明天会发生什么。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。这里我们需要创建一个prev指针和cur指针,每次cur向下走之前,我们就将当前的cur的值给prev。然后我们的cur的left指针就是指向我们的prev。2.返回链表中的第一个节点的指针。原创 2022-10-24 22:22:24 · 305 阅读 · 1 评论 -
【LeetCode】【二叉树的最近公共祖先】
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。著作权归领扣网络所有。解释:节点 5 和节点 1 的最近公共祖先是节点 3。一个节点也可以是自己的祖先。原创 2022-10-24 21:00:31 · 354 阅读 · 0 评论 -
【LeetCode】【二叉树的层序遍历(二)】
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal-ii。给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历。这里的思路和我们前一题的一样,只不过在返回的时候,因为这里要求自底向上逐层遍历,所以我们只需要将最后的vv逆置一下就可以了。输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]输入:root = [1]输入:root = []原创 2022-10-24 19:44:03 · 250 阅读 · 0 评论 -
【LeetCode】【二叉树的层序遍历】
然后此时我们的第一层的数据就全部出队了,此时我们的队列中全部都是第二层的数据了,我们再更新我们的level_size,记录我们第二层的数据个数。然后按照层序遍历的方式出队level_size个数据,并将其左右结点放入队列中,也就是我们的第二层。给你二叉树的根节点 root ,返回其节点值的 层序遍历。相较于我们之前的层序遍历,我们就是新增了一个level_size,让其一层一层出来。输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]原创 2022-10-24 19:32:20 · 309 阅读 · 0 评论 -
【LeetCode】【根据二叉树创建字符串】
解释:初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)"。给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。2.对于左子树不为空,右子树为空,省略掉括号(右子树的括号)输出:"1(2()(4))(3)"输出:"1(2(4))(3)"原创 2022-10-24 19:09:02 · 71 阅读 · 0 评论 -
【LeetCode】【二叉搜索树迭代器】
这里我们的第一种思路就是在构建对象的时候,也就是初始化函数的时候,进行一次中序遍历,将我们中序遍历的结果保存在一个vector容器中,同时将我们的pointer指针指向0的位置,然后后序判断有没有下一个值的时候,就直接判断pointer是不是比我们的vector的容器的大小小就可以了。然后我们的pointer指针默认就是指向下一个元素的位置,如果我们想要获取到next元素的话,就直接将vector的第next位置的元素返回就可以了,同时要让我们的next++,来实现迭代(始终指向当前位置的下一个位置)。原创 2022-10-10 14:48:04 · 287 阅读 · 1 评论 -
【牛客】【二维数组中的查找】
在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数据范围:矩阵的长宽满足 0≤n,m≤5000≤n,m≤500 , 矩阵中的值满足 0≤val≤1090≤val≤109。进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n+m)O(n+m)给定 target = 3,返回 false。给定 target = 7,返回 true。存在7,返回true。原创 2022-10-04 09:37:32 · 86 阅读 · 1 评论 -
【LeetCode】【有效的括号】
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。链接:https://leetcode.cn/problems/valid-parentheses。商业转载请联系官方授权,非商业转载请注明出处。每个右括号都有一个对应的相同类型的左括号。s 仅由括号 '()[]{}' 组成。左括号必须用相同类型的右括号闭合。输入:s = "()[]{}"来源:力扣(LeetCode)左括号必须以正确的顺序闭合。输入:s = "()"输入:s = "(]"原创 2022-09-28 14:02:27 · 238 阅读 · 0 评论 -
【LeetCode】【删除链表倒数的第N个结点】
这里我们的思路就是让一个结点prev比我们的behind先走n个结点,然后这两个结点同时沿着链表向前移动。当我们的prev走到最后一个结点的时候,我们的behind所走到的就是倒数第n+1个结点,然后也就是behind结点直接将其下一个结点删除即可。著作权归领扣网络所有。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。输入:head = [1,2], n = 1。输入:head = [1], n = 1。输出:[1,2,3,5]原创 2022-09-26 15:03:04 · 453 阅读 · 0 评论 -
【LeetCode】【两数相加】
于是我们是如下的写法。2.如果一个链表已经走完了,但是另外一个链表中还有数据,就将有数据的那一个链表中的结点的数据和进位%10,作为新的结点。3.如果两个链表都走完了,但是进位还有数据,就将进位中的数据一位一位地链接到我们的结果链表后面。1.如果两个链表的对应位置的结点都是有数据的,就直接相加并加上进位然后%10,作为新的结点。输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]思路,只不过之前的大数加法用的是字符串,我们这里用的是链表。输出:[8,9,9,9,0,0,0,1]原创 2022-09-26 14:37:21 · 75 阅读 · 0 评论 -
【LeetCode】【数组中的第K个最大元素】
链接:https://leetcode.cn/problems/kth-largest-element-in-an-array。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。商业转载请联系官方授权,非商业转载请注明出处。这里我们可以直接构建一个大根堆,然后pop K-1次,得到第K大的数。输入: [3,2,3,1,2,4,5,5,6], k = 4。输入: [3,2,1,5,6,4], k = 2。原创 2022-09-24 16:57:44 · 270 阅读 · 0 评论 -
【LeetCode】【逆波兰表达式求解】
我们先将上面的后缀表达式中的1和2入栈,发现后面没有操作数,而是数字3,于是就接着入栈,然后发现后面是*,也就是操作数,我们就将栈连续出栈两个元素,也就是2和3出栈,然后进行乘法操作,运算出来的结果6再次入栈。输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]输入:tokens = ["4","13","5","/","+"]著作权归领扣网络所有。输入:tokens = ["2","1","+","3","*"]原创 2022-09-24 12:32:04 · 549 阅读 · 1 评论 -
【牛客】【栈的压入、弹出序列】
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false。这样的顺序得到[4,5,3,2,1]这个序列,返回true。原创 2022-09-24 11:27:52 · 145 阅读 · 0 评论 -
【LeetCode】【最小栈】
这里我们的方式是定义一个辅助站,如果新的元素插入的时候比我们原有的辅助栈的栈顶元素小,辅助栈就入栈,如果比辅助栈的栈顶元素更大,就不入栈。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。链接:https://leetcode.cn/problems/min-stack。在出栈的时候,如果辅助栈的栈顶元素和原有栈的栈顶元素相等的话,就弹出栈。int getMin() 获取堆栈中的最小元素。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。原创 2022-09-24 10:59:22 · 399 阅读 · 2 评论 -
【LeetCode】【电话号码的字母组合】
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number。输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。商业转载请联系官方授权,非商业转载请注明出处。本题与下面这道题的最后一种写法的思路(递归)相似。输出:["a","b","c"]输入:digits = "2"...原创 2022-08-14 15:46:09 · 78 阅读 · 0 评论 -
【Leetcode】【字符串相乘】
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。链接:https://leetcode.cn/problems/multiply-strings。然后编写字符串相乘的函数。字符串相乘的函数需要调用我们字符串相加的函数。输入: num1 = "123", num2 = "456"输入: num1 = "2", num2 = "3"对于字符串相乘,我们先需要定义字符串相加。来源:力扣(LeetCode)输出: "56088"....原创 2022-08-14 00:02:46 · 398 阅读 · 0 评论 -
【LeetCode】【验证回文串】
链接:https://leetcode.cn/problems/valid-palindrome。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。输入: "A man, a plan, a canal: Panama"著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解释:"amanaplanacanalpanama" 是回文串。说明:本题中,我们将空字符串定义为有效的回文串。解释:"raceacar" 不是回文串。输入: "race a car"...原创 2022-08-13 22:20:48 · 58 阅读 · 0 评论 -
【LeetCode】【杨辉三角】
这里我们将这个数组正位,非1的位置上的数据是其上一行对应位置的数据再加上对应位置数据的左侧的数据。链接:https://leetcode.cn/problems/pascals-triangle。输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。商业转载请联系官方授权,非商业转载请注明出处。在「杨辉三角」中,每个数是它左上方和右上方的数的和。输入: numRows = 1。...原创 2022-08-13 22:13:55 · 59 阅读 · 0 评论 -
【LeetCode】【牛客】二叉树刷题
一、相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内-10.原创 2022-05-25 19:54:24 · 295 阅读 · 8 评论 -
【LeetCode】【牛客】栈和队列刷题(C语言实现)
一、设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。原创 2022-05-16 22:41:29 · 469 阅读 · 8 评论 -
【LeetCode】【牛客】链表刷题(三)
目录一、有效的括号二、复制带随机指针的链表一、有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode)链接:力扣著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。对于有效的括号这道题,我们需要使用与栈相关的内容,这里可以查看我们的另外一篇博文栈的实现(c语言数据结构)_wo..原创 2022-05-13 16:34:25 · 375 阅读 · 4 评论 -
【LeetCode】【牛客】链表刷题(二)
一、回文链表链表分割相交链表判断有无环状链表原创 2022-05-05 23:29:27 · 642 阅读 · 5 评论 -
【LeetCode】【牛客】链表刷题(一)
一、反转链表力扣给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]对于链表的转置,在此,我们给出下面的解法一、头插法struct ListNode* reverseList(struct ListNode* head){ //创建我们的新头结点并置空 struct ListNode* newhead=NULL; //创建我们的临时结点来存储我们传入的头结点.原创 2022-04-30 20:18:07 · 1250 阅读 · 10 评论