
刷题
主要存放刷题
予安灵
计算机小白鼠
展开
-
第十二届蓝桥杯省赛软件类(c&c++组)
解题思路答案第二题(卡片) 解题思路答案 第三题(直线) 解题思路 答案 解析:这题的理解并不难,就是用三重循环暴力找出方案的总类,但是如果直接暴力,因为n十分大,所以直接暴力空间复杂度和时间复杂度是不太能行的,所以换种方法,先找出n的所有因数,再枚举因数的组合:题解 结果题目:解析:要求1到2021之间的最短路径,这是典型的最短路径问题,可以以采用Dijkstra算法来计算两点之间的最短路径问题。Dijkstra算法是一种用于计算带权有向图或无向图中单个源原创 2025-04-01 23:40:09 · 693 阅读 · 0 评论 -
2023年团体程序设计天梯赛总决赛练习
什么是机器学习?面试官:9 + 10 等于多少?答:3面试官:差远了,是19。答:16面试官:错了,是19。答:18面试官:不,是19。答:19本题就请你模仿这个“机器学习程序”的行为。输入格式:输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别表示面试官给出的两个数字 A 和 B。输出格式:要求你输出 4 行,每行一个数字。第 1 行比正确结果少 16,第 2 行少 3,第 3 行少 1,最后一行才输出 A+B 的正确结果。原创 2025-03-28 21:25:44 · 902 阅读 · 0 评论 -
两个数组的交集(排序+双指针)
初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre ,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。为了保证加入元素的唯一性,我们需要额外记录变量 pre 表示上一次加入答案数组的元素。对两个数组进行排序,然后使用两个指针遍历两个数组,输出结果中的每个元素一定是。采用排序和双指针解决。原创 2024-08-19 17:53:11 · 299 阅读 · 0 评论 -
数组中两元素的最大乘积
排序之后最后两个元素的乘积即为最大。,请你选择数组的两个不同下标。请你计算并返回该式的最大值。原创 2024-08-19 18:24:14 · 153 阅读 · 0 评论 -
判断数组存在重复元素
对于数组中每个元素,我们将它插入到哈希表中。如果插入一个元素时发现该元素已经存在于哈。如果数组中每个元素互不相同,返回。1.可以对数组先进行排序,再遍历。如果任一值在数组中出现。希表中,则说明存在重复的元素。原创 2024-08-19 17:48:25 · 303 阅读 · 0 评论 -
合并两个有序数组
最终,合并后数组不应由函数返回,而是存储在数组。其次是采用双指针,双指针在数组中的运用也很常见。比较容易想到的时先将两个数组合并然后再排序。个元素表示应合并的元素,后。中,使合并后的数组同样按。原创 2024-08-19 15:48:19 · 357 阅读 · 0 评论 -
判断是否是循环链表
/比较容易理解的是使用快慢双指针,适合数据结构小白,只需要判断快指针是否会等于慢指针即可。//参考LeetCode的解题方法,也可以使用哈希表来处理,在此不做说明。,判断链表中是否有环。给你一个链表的头节点。//判断是否是循环链表。原创 2024-04-15 10:57:01 · 397 阅读 · 1 评论 -
多数元素的统计
哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。原创 2024-08-19 16:12:31 · 168 阅读 · 0 评论 -
岛屿的最大面积问题
在深度搜先搜索的同时把接下来想要遍历的土地放在栈里,然后在取出这些土地的时候访问它们。访问每一片土地时,我们将对围绕它四个方向进行探索,找到还未访问的土地,加入到栈 stack 中,只要栈 stack 不为空,就说明我们还有土地待访问,那么就从栈中取出一个元素并访问。在leetcode的官网解题中给出了一种深度优先搜索+栈的解决方法。(代表土地) 构成的组合,这里的「相邻」要求两个。如果没有岛屿,则返回面积为。岛屿的面积是岛上值为。给出python写法。原创 2024-08-20 13:49:43 · 155 阅读 · 0 评论 -
岛屿数量问题
给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1解:岛屿问题是DFS的网格类遍原创 2024-08-20 13:18:58 · 171 阅读 · 0 评论 -
对称二叉树
如果一个树的左子树与右子树镜像对称,那么这个树是对称的,较为容易想到的是用递归去判断每一个节点。给你一个二叉树的根节点。, 检查它是否轴对称。原创 2024-08-20 11:34:02 · 151 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
请你找出给定目标值在数组中的开始位置和结束位置。因为是排序数组,所以可以利用二分方法来快速查找。给你一个按照非递减顺序排列的整数数组。#以上写法与leetcode官网相同。如果数组中不存在目标值。JavaScript写法。原创 2024-08-19 18:35:24 · 332 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。下面是JavaScript的写法。简单的二分查找即可解决。原创 2024-08-19 18:40:01 · 285 阅读 · 0 评论 -
递增顺序查找树
根据二叉树中序遍历的性质,先对输入的二叉搜索树执行中序遍历,将结果保存到一个列表中;然后根据列表中的节点值,创建等价的只含有右节点的二叉搜索树,其过程等价于根据节点值创建一个链表。将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。在树的三种遍历方式中,中序遍历应用于二叉树时能够很好的解决一些问题,可以灵活运用。在二叉树中,由于二叉树特有的性质,采取中序遍历时会得到递增序列。给你一棵二叉搜索树的。原创 2024-08-21 12:43:52 · 140 阅读 · 0 评论 -
种花问题---贪心算法
链接:https://leetcode.cn/problems/can-place-flowers/solutions/542556/chong-hua-wen-ti-by-leetcode-solution-sojr/判断能否在不打破种植规则的情况下在花坛内种入 n 朵花,从贪心的角度考虑,应该在不打破种植规则的情况下种入尽可能多的花,然后判断可以种入的花的最多数量是否大于或等于 n。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。原创 2024-08-20 10:56:43 · 231 阅读 · 0 评论 -
完全二叉树节点个数
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。Leetcode官网给出了一种二分查找+位运算的解法。JavaScript写法。,求出该树的节点个数。原创 2024-08-19 18:46:42 · 554 阅读 · 0 评论 -
二叉树最大深度
如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为max(l,r)+1。是指从根节点到最远叶子节点的最长路径上的节点数。求最大深度的问题,最常用的是用递归+深度优先探索。原创 2024-08-20 11:38:17 · 257 阅读 · 0 评论 -
找零钱问题
顾客只可能给你三个面值的钞票,顾客只可能给你三个面值的钞票,因此有几种情况,5美元,10美元,15美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付。如果你能给每位顾客正确找零,返回。顾客排队购买你的产品,(按账单。在柠檬水摊上,每一杯柠檬水的售价为。每位顾客只买一杯柠檬水,然后向你付。注意,一开始你手头没有任何零钱。支付的顺序)一次购买一杯。原创 2024-08-20 11:04:37 · 181 阅读 · 0 评论 -
岛屿的周长问题
对于一个陆地格子的每条边,它被算作岛屿的周长当且仅当这条边为网格的边界或者相邻的另一个格子为水域。因此,我们可以遍历每个陆地格子,看其四个方向是否为边界或者水域,如果是,则将ans+1。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100。计算这个岛屿的周长。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。其次最常用的就是深度优先搜索,下面定值为2表示已经遍历过的陆地格子。原创 2024-08-20 13:32:07 · 235 阅读 · 0 评论 -
N叉树问题
需要解决N叉树的遍历问题,常见的有前序遍历和后序遍历,还有N叉树的最大深度问题。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。在二叉树的问题基础上,扩展到了N叉树,但是方法运用类似。与二叉树一样,采用深度优先搜索和递归解决。给定一个 N 叉树,找到其最大深度。给定一个 n 叉树的根节点。在此提供python的写法。原创 2024-08-20 13:57:44 · 179 阅读 · 0 评论 -
判断相同的树
如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。需要判断节点以及节点的值是否一样,可以采用搜索的方式解决。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。原创 2024-08-20 11:29:00 · 267 阅读 · 0 评论 -
分发饼干---贪心算法
为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。,这是能让孩子们满足胃口的饼干的最小尺寸;此题涉及到排序+双指针+贪心。下面提供python的写法。,我们可以将这个饼干。原创 2024-08-20 10:47:01 · 141 阅读 · 0 评论 -
二叉树最小深度
不管是求最大深度还是最小深度,都能使用深度优先搜索完成。是从根节点到最近叶子节点的最短路径上的节点数量。给定一个二叉树,找出其最小深度。下main提供python的写法。原创 2024-08-20 13:03:03 · 121 阅读 · 0 评论 -
二叉树的路径总和
的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。提供python的写法。原创 2024-08-20 13:07:50 · 169 阅读 · 0 评论 -
最长的回文串--贪心
回文串」是指倒序后和自身完全相同的字符串,即具有关于中心轴对称的性质。当回文串长度为奇数时,则位于中心的字符出现了奇数次,其余所有字符出现偶数次;当回文串长度为偶数时,则所有字符都出现了偶数次;此题为贪心算法的题目,但是用哈希表也可以完成。给定一个包含大写字母和小写字母的字符串。通过这些字母构造成的。在构造过程中,请注意。原创 2024-08-20 10:43:33 · 217 阅读 · 0 评论 -
判断环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。**解题:**可以考虑双指针即快慢指针解决,如果快指针遍历到空即没有环,否则有环。**题目:**给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true。否则,返回 false。输入:head = [3,2,0,-4], pos = 1。解释:链表中有一个环,其尾部连接到第二个节点。原创 2024-09-22 19:35:53 · 213 阅读 · 0 评论 -
链表中奇偶结点的移动
tail是单循环链表的尾指针。原创 2024-09-22 15:31:52 · 489 阅读 · 0 评论 -
用栈方式实现进制转换
解题:进制的转换方法有许多种,可以用数组,循环、栈等方式。函数,sstack是需要的栈,n是待转换的十进制的数。的实现,其中sstack是顺序栈,x是待进制的元素。输出样例: overflow!输入样例: 200200。输入样例: 2020。原创 2024-09-26 23:19:59 · 690 阅读 · 4 评论 -
链表中间节点
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。输入:head = [1,2,3,4,5,6]输入:head = [1,2,3,4,5]解释:链表只有一个中间结点,值为 3。输出:[3,4,5]输出:[4,5,6]原创 2024-09-22 20:40:21 · 252 阅读 · 0 评论 -
链表反转的几种方法
在遍历链表时,将当前节点的 next 指针改为指向前一个节点。但是由于节点没有引用其前一个节点,因此必须要准备一个指针事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。用递归法相比于迭代法,重要的是如何处理已经被反转的部分,即递归到第一个节点n1时,n1 的下一个节点必须指向 ∅,否则会产生环形链表。在链表的考查中,链表的反转是比较常见的,在此介绍几种常用的方法。假设链表为 1→2→3→∅,把它改成 ∅←1←2←3。,请你反转链表,并返回反转后的链表。这里也提供python的写法,更加简便。原创 2024-08-21 20:35:56 · 202 阅读 · 0 评论 -
迷宫问题的深度优先法
一个陷入迷宫的老鼠如何找到出口的问题。无论离出口多远,它总是按照这样的顺序尝试,当到达一个死胡同之后,老鼠将进行“回溯”。迷宫只有一个入口,一个出口,设计程序要求输出迷宫的一条通路。输入样例: 9 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 0。1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 7 7 输出样例: 7 7;迷宫问题是数据结构中常见的一种类型,也可以当作是网格类问题的一种,对于这种问题,一般有。原创 2024-10-01 16:42:23 · 582 阅读 · 11 评论 -
判断回文链表
输入:head = [1,2,2,1]输入:head = [1,2]原创 2024-09-22 20:46:05 · 186 阅读 · 0 评论 -
合并两个有序链表
输入:l1 = [1,2,4], l2 = [1,3,4]输入:l1 = [], l2 = [0]输入:l1 = [], l2 = []:比较两个链表的头部,递归剩下的元素。输出:[1,1,2,3,4,4]原创 2024-09-22 19:24:29 · 256 阅读 · 0 评论