
算法
文章平均质量分 86
冲
YSRM
一年好景橙黄
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetcodeBST2JAVA
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]6节点2和节点8的最近公共祖先是6。2节点2和节点4的最近公共祖先是2, 因为根据定义最近公共祖先节点可以为节点本身。原创 2025-04-09 16:18:49 · 634 阅读 · 0 评论 -
Leetcode BST JAVA
给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。合并过程必须从两个树的根节点开始。[2,2][0, 2000]该算法通过递归的方式合并两棵二叉树 root1 和 root2,生成一棵新二叉树。原创 2025-03-26 13:43:20 · 565 阅读 · 0 评论 -
leetcode二叉树3
给定二叉树的根节点root,返回所有左叶子之和。24在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24root = [1]0[1, 1000]通过递归遍历二叉树,识别并累加所有左叶子节点的值。使用一个标志变量 flag 区分当前节点是否为其父节点的左子节点,只有当节点是叶子节点且是左子节点时,才将其值加到全局变量 sum 中。主函数从根节点开始递归,特殊处理单节点树(根节点不算左叶子),最终返回总和。原创 2025-03-24 16:47:13 · 1010 阅读 · 0 评论 -
二叉树leetcodeJAVA2
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。[2,3,1]root = [][][0, 100]翻转二叉树的核心在于。从根节点开始,先将其左子树和右子树交换(使用临时变量保存其中一个子树),然后递归地对新的左子树和右子树执行相同的操作,直到遇到空节点(null)停止。整个过程通过自顶向下的递归,确保每个节点的左右子树都被正确翻转,最终返回调整后的根节点。原创 2025-03-20 14:28:23 · 764 阅读 · 0 评论 -
LEETCODE:二叉树的层序遍历JAVA
给你二叉树的根节点root,返回其节点值的。(即逐层地,从左到右访问所有节点)。root = [1][[1]]root = [][][0, 2000]用一个全局列表 ans 表示所有层,其中 ans.get(deep) 对应第 deep 层的节点值集合。每次递归时,deep 表示当前节点所在的层号(从 0 开始)。如果 ans 的大小不足以容纳当前层(即 ans.size() < deep + 1),就添加一个新的空列表。然后将当前节点的值加入对应层的列表中。原创 2025-03-09 16:51:42 · 1191 阅读 · 0 评论 -
二叉树的前序、中序和后序遍历(迭代法+递归法)
解题思路1代码1 解题思路2代码2解题思路3代码394.二叉树的中序遍历解题思路1代码1解题思路2代码2解题思路3代码3 145.二叉树的中序遍历解题思路1代码1解题思路2代码2解题思路3代码3原创 2025-03-07 10:59:35 · 642 阅读 · 0 评论 -
leetcode——栈、队列
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。在这里,我们将队列存储数组元素的索引,并确保队列中的元素索引按其对应值从大到小排列。的滑动窗口从数组的最左侧移动到最右侧,每次只向右移动一位,要求返回每个窗口中的最大值。的滑动窗口从数组的最左侧移动到数组的最右侧。的字母并删除,重复执行该操作直到无法继续删除为止,返回最终的字符串。原创 2025-01-14 17:30:57 · 1097 阅读 · 0 评论 -
leetcode--字符串
给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。第二行为字符串 s,代表需要旋转的字符串。例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。原创 2024-12-17 16:23:05 · 699 阅读 · 0 评论 -
leetcode--hash表2
给定两个数组nums1和nums2,返回它们的交集[2][9,4][4,9] 也是可通过的本质上是hash数组ansresansnums1nums1[i]nums2[i][0, 1000]resnums1nums1ansnums2nums2ansnums1resresres1nums1nums2nums1时间复杂度为 O(m),其中m是nums1的长度。nums2时间复杂度为 O(n),其中n是nums2的长度。通过将结果数组从res截取成实际交集的大小,时间复杂度为 O(k),其中。原创 2024-12-13 13:52:24 · 1220 阅读 · 0 评论 -
leetcode——哈希表1
原理代码 38.赎金信原理代码49.字母异位词分组原理代码 438.找到字符串中所有字母异位词原理代码 这题其实不用hash,能更好的解决,其实是滑动窗口的思想,滑动窗口能把时间复杂度降低到o(n)原理代码原创 2024-12-10 16:48:31 · 930 阅读 · 0 评论 -
leetcode——链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。[2,1]head = [][]链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?该算法使用的方式反转链表。原创 2024-12-08 22:18:23 · 1316 阅读 · 0 评论 -
leetcode--设计链表
你可以选择使用单链表或者双链表,设计并实现自己的链表。val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果是双向链表,则还需要属性prev以指示链表中的上一个节点。假设链表中的所有节点下标从开始。实现index-1valvalvalindexindexindexindex// 链表变为 1->2->3// 返回 2// 现在,链表变为 1->3// 返回 3getaddAtHeadaddAtTailaddAtIndex2000。原创 2024-12-04 16:32:59 · 378 阅读 · 0 评论 -
kamacoder——区间和
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。原创 2024-12-04 16:26:56 · 346 阅读 · 0 评论 -
leetcode--螺旋矩阵
给定一个二维数组array,请返回「」该数组的结果。:从左上角开始,按照的顺序提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。north = 0west = 0螺旋遍历从左上角()开始,顺时针按“右、下、左、上”的顺序遍历二维数组。从左到右遍历,即遍历当前的北边界行。从上到下遍历,即遍历当前的东边界列。从右到左遍历,即遍历当前的南边界行。从下到上遍历,即遍历当前的西边界列。原创 2024-12-03 14:01:50 · 1251 阅读 · 0 评论 -
leetcode——滑动窗口
给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的02子数组[4,3]是该条件下的长度最小的子数组。原创 2024-12-02 16:35:47 · 838 阅读 · 0 评论 -
leetcode——移除数组
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被。函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1。不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度5。原创 2024-12-01 17:38:43 · 764 阅读 · 0 评论 -
leetcode——二分法
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:nums = [[3,4]示例 2:nums = [[-1,-1]示例 3:[-1,-1]nums是一个非递减数组原理该问题的目标是查找目标值target在一个已排序的非递减数组nums中的开始和结束位置。为了确保算法的时间复杂度为O(log n)原创 2024-11-28 15:15:37 · 673 阅读 · 0 评论 -
leetcode-数组1
给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。[3,9]这个算法通过二分查找来判断一个数num是否是完全平方数。首先,若num是 1,直接返回true,因为 1 是完全平方数。然后设置两个边界left和right,并进行二分查找。原创 2024-11-28 14:56:46 · 609 阅读 · 0 评论 -
异或-java-leetcode
给你两个整数,n和start。数组nums(下标从 0 开始)且。请返回nums中所有元素按位异或()后得到的结果。8数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8。"^" 为按位异或 XOR 运算符。8数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.72。题目要求对生成的数组的所有元素进行异或,因此无需实际创建数组,而是通过累加生成每个元素的值并逐步异或累计结果。循环中,每次计算新元素(原创 2024-11-26 17:47:25 · 940 阅读 · 0 评论 -
Java:循环练习
输入一个数字,判断是否为回文,回文就是正着读和反着读都一样,如121是回文,123则不是。输入一个被除数和一个除数,要求在不利用乘法、除法、取余的情况下得到商和余数。输入一个大于等于2的整数,返回其平方根,结果只保留其整数部分,小数部分舍去。输入一个正整数,判断是否为质数,质数只能被1和本身整除,否则叫合数。不断输入数字,通过猜大了猜小了提示以此来猜对系统提供的数字。关于random模块,之间的随机整数,包括。原创 2024-08-21 23:24:15 · 652 阅读 · 2 评论 -
蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令
在一个指令循环中,CPU每次提取程序计数器指向的内存单元和下一个内存单元中两个十六进制数组成的四位十六进制数作为机器指令并执行,若在指令执行时未进行JUMP操作,则把程序计数器向后移两个单元。输入一行16个十六进制数(每个十六进制数占两位,可能以0开头),用空格隔开,分别表示程序H运行前00到0F内存单元中存放的数据。输出一行16个十六进制数(每个十六进制数占两位,可能以0开头),用空格隔开,分别表示程序H结束后00到0F内存单元中存放的数据。输出共 1 行,一个整数,表示反转后的新数。原创 2023-02-20 17:49:57 · 587 阅读 · 0 评论 -
蓝桥杯算法训练合集 十六 1.首字母变大写2.盾神计科导作业3.Cinema4.接水问题
现在给出n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。对于所有数据满足0原创 2023-02-19 18:07:01 · 816 阅读 · 0 评论 -
蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表
于是他随便指定了一根刻度当刻度0,读了一下时间,结果(你懂的)……老冯随便把一根刻度当做刻度0,然后他量得时针的角度为70°,分针的角度为300°,然后他读了一下时间。若你选择先取,则输出n+2行,第一行输出"Fisrt"表示先取,之后n+1行每一行是你每次操作的堆号(1或2)及取出的石子数。若你选择后取,则输出n+1行,第一行输出"Second"表示后取,之后n行每一行是你每次操作的堆号(1或2)及取出的石子数。下面n行,每行有两个整数,用空格隔开,表示郭鸡每次操作的堆号(1或2)及他取的石子数。原创 2023-02-18 21:41:31 · 1500 阅读 · 0 评论 -
蓝桥杯算法训练合集十四 1.P08052.P07053.同余方程4.P08015.ascii应用
具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过10位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过20位),最后把这个字符串打印出来。假设a1={2, 4, 5, 8}, a2={1, 0, 4, 6},则result={3, 4, 9, 14};输入ascii码n(65≤n≤90,97≤n≤122),输出对应的字母及其在字母表中的位置并判断大小写。输出一行,分别是ascii码n所对应的字符,并判断大小写,及其在字母表中的位置。输入第一行为一个整数n,表示集合A中的元素个数。原创 2023-02-17 23:05:41 · 891 阅读 · 0 评论 -
蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵
问题描述编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后用最大数减去最小数,得到一个新的自然数,把这个数打印出来。然后对于这个新的自然数,重复上述步骤,直到该自然数的值不再发生变化。例如,假设用户输入的自然数为1001,那么由它所形成的最大数为1100,最小数为11,因此新的自然数为1089。对于1089,由它形成的最大数为9810,最小数为189,因此新的自然数为9621。9621的最大数为9621,最小数为1269,结果为8352,。原创 2023-02-10 20:43:04 · 866 阅读 · 0 评论 -
蓝桥杯算法训练合集十二 1.比较2.计算最小公倍数3.比赛安排4.潜伏者5.P0702
小 C 的破译过程是这样的:扫描原信息,对于原信息中的字母 x(代表任一大写字母),找到其在加密信息中的对应大写字母 y,并认为在密码里 y 是 x 的密字。m行,每行R2-L2+1个整数,第一个整数表示第L2个数在数列第L1到R1个数中不大于它的个数,第一个整数表示第L2+1个数在数列第L1到R1个数中不大于它的个数,以此类推。设计一个比赛的安排,使在2^n−1天内每个队都与不同的对手比赛。例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。原创 2023-02-07 17:02:57 · 483 阅读 · 0 评论 -
蓝桥杯算法训练合集十一 1.P02012.石头剪刀布3.HX养猪4.邪恶的NAN5.P0601
问题描述用户输入3个整数,程序输出三个整数从大到小的排列。输入样例9 2 30输出样例30 9 2示例代码。原创 2023-02-06 10:18:55 · 898 阅读 · 0 评论 -
蓝桥杯算法训练合集十 1.1的个数2.进制转换3.数据交换4.抗击虫群5.连续平方和
例如,当R=7时,所需用到的数码是0,1,2,3,4,5和6,这与其是R或-R无关。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。但是,这些药物要发挥效用,必须填满位于A区的两个容器S、T,这两个容器的容量分别为n,m而每次填充药物的量p是固定的,现在人们想知道,将P设置为多少才能在最快时间内填满两个容器(即每次的添加量为P,一次只能填充一个容器,且不可超出容器容积,可以认为在添加完S容器后,在添加T容器)一个整数,表示1出现的资料。原创 2023-02-03 20:59:33 · 1374 阅读 · 0 评论 -
蓝桥杯算法训练合集九 1.计算税额2.数字统计3.删除字符串中的“*”4.2的次幂表示5.排序
问题描述税务局希望你帮他们编写征税程序,该程序的功能是:首先输入某公司的年销售额sale和税率rate,然后程序将计算出相应的税额tax,并把他显示在屏幕上。计算公式是:tax=sale*rate,结果保留小数点后两位。(注:出自课本第三章第3题)。输入格式输入一行,包含两个浮点数sale, rate,分别表示销售额和税率输出格式输出一行,包含一个浮点数,表示税额tax,结果保留小数点后两位。样例输入500000 0.1样例输入50000.00示例代码。原创 2023-02-01 22:58:22 · 422 阅读 · 0 评论 -
蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数
二叉树的遍历有三种常用方式,分别为先序遍历(根节点->左子树-> 右子树)、中序遍历(左子树-> 根节点 -> 右子树)和后序遍历(左子树-> 右子树-> 根节点)。如果单词末尾为y,且前一个字母为辅音(除a, e, i, o, u以外的其它情况),则把y改成ies;编写测试程序,输入一个长度小于20的单词,输出该单词的复数形式。输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。例如:n=7,k=3,下面三种分法被认为是相同的。输出一个整数,即a^2%m的值。原创 2023-01-30 19:13:20 · 921 阅读 · 0 评论 -
蓝桥杯算法训练合集七 1.序列2.排序3.按位输出数字4.A5.字符串替换
给n个m元整数组从小到大排序,如果两个m元组的第一个元素不同,则他们的大小关系即为第一个元素的大小关系,否则为他们后m-1元的大小关系,完全相同的两个m元组相等。逆序: 取一个排列为标准排列, 其它排列中某两个元素的次序与标准排列中这两个元素的次序相反时,则称这两个元素构成一个逆序.通常取从小到大的排列为标准排列, 即 1 ~ n的全排列中取123...(n - 1)n为标准排列。接下来n行,每行m个正整数,表示每一个n元组。逆序数为偶数称为偶排列, 逆序数为奇数称为奇排列, 标准排列规定为偶排列.原创 2023-01-29 19:05:50 · 873 阅读 · 0 评论 -
蓝桥杯算法训练合集六 1.二元函数2.计算和差3.字串逆序4.计算器5.送分啦
在计算时时常出现二进制的某一位出现无法响应的情况,在进行加法计算时,无法响应的那一位将不会产生变化,即不考虑低位向那一位的进位、那一位的加法和那一位向高位的进位。如果ki为2表示此机器从最低位(第0位)往最高位(第31位)数的第ai位的故障已经排除,那一位的数字不变,并且将重新开始响应加法运算。如果ki为1表示此机器从最低位(第0位)往最高位(第31位)数的第ai位出现故障,那一位的数字不变,但将不再响应加法计算。输出一个数,表示计数器的十进制的值(无法响应的那几位上的二进制位也算作有效)。原创 2023-01-29 10:39:12 · 689 阅读 · 0 评论 -
蓝桥杯算法训练合集五 1.简单字符变换2.字母转换3.输出一个倒等腰三角形4.寻找数组中最大值5.斐波拉契数列6.高低位变换
有一个数列,它的第一项是1,第二项是2,第三项是第一项与第二项的和,后面的项依次类推,即F(1)=1,F(2)=2,F(n)=F(n-1)+F(n-2)(n≥3,n∈N*),请使用递归函数编写程序,对于从键盘输入的整数n,计算并输出F(n)的值。输入一个无符号整数n(unsigned int类型),n可以用一个32位的二进制数表示(不足32位用0补足),我们称这个二进制数的前16位为“高位”,后16位为“低位”,输出将n的高位和低位交换后的值(用十进制表示)。从键盘输入一个大写字母,要求改用小写字母输出。原创 2023-01-27 13:51:46 · 765 阅读 · 0 评论 -
蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。编写一个程序,输入一个百分制成绩(整数),输出相应的成绩等级。规定:90或90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为F。当然了,为了方便起见,把答案%1,000,000,007输出就好。行,每一行表示一个整数,并且按照从小到大的顺序排列。一行,三个整数A,B,C,以空格隔开。原创 2023-01-17 15:04:21 · 977 阅读 · 0 评论 -
蓝桥杯算法训练合集四之栈的使用
栈对于求顺序和表达式求值有着特殊的作用。原创 2023-01-12 20:13:31 · 252 阅读 · 0 评论 -
大整数类BigInteger
注意,这个常数不属于任何BigInteger类型的结构体变量,而是属于BigInteger这个“类型”的,因此称为静态成员变量,在声明时需要加static修饰符。用vector而非数组保存数字的好处显而易见:不用关心这个整数到底有多大,vector会自动根据情况申请和释放内存。可以给结构体声明一些属于该结构体类型的静态成员变量,方法是加上static修饰符。静态成员变量在结构体外部使用时要写成“结构体名::静态成员变量名”。上面有两个赋值运算符,一个是直接输入数字,另一个是以输入字符串形式的数字。原创 2023-01-11 19:48:41 · 434 阅读 · 3 评论 -
栈、队列与优先队列
为了方便起见,此处为每个不同的集合分配一个唯一的ID,则每个集合都可以表示成所含元素的ID集合,这样就可以用STL的set来表示了,而整个栈则是一个stack。优先队列是一种抽象数据类型(Abstract Data Type,ADT),行为有些像队列,但先出队列的元素不是先进入队列的元素,而是队列中优先级最高的元素。有t个团队的人正在排一个长队。ADD操作将得到{{},{{{】}},{{},{{}}}},输出3.UNION操作将得到{{},{{}},{{{}}}},输出3。原创 2023-01-11 17:09:34 · 749 阅读 · 0 评论 -
C++的集合和映射
set就是数学上的集合——每个元素最多只出现一次,和sort一样,自定义类型也可以构造set,但同样必须定义“小于”运算符。原创 2023-01-10 20:42:26 · 629 阅读 · 0 评论 -
STL初步之不定长数组vector
vector就是一个不定长数组。不仅如此,它把一些常用操作“封装”在了vetcor类型内部。例如,若a是一个vector,可以用a.size()读取它的大小,a.resize()改变大小,a.push_back()向尾部添加元素,a.pop_back()删除最后一个元素。vector是一个模板类,所以需要用vectora或者vectorb这样的方式来声明一个vector。原创 2023-01-08 20:07:48 · 337 阅读 · 0 评论 -
STL初步之排序与检索
现有N个大理石,每个大理石上写了一个非负整数。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石上的数合并到一行,所有问题也合并到一行。algorithm头文件中的sort可以给任意对象排序,包括内置类型和自定义类型,前提是类型定义了“原创 2023-01-08 17:48:14 · 101 阅读 · 0 评论