![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Mwwwwwwww
这个作者很懒,什么都没留下…
展开
-
红黑树-原理
红黑树,可以说是树中的绝对大佬了,它和我们前一篇讲解的avl树一样,都属于二叉排序树,avl树中我们通过记录平衡因子以及旋转来保证一棵树的绝对平衡,而今天所讲的红黑树则是通过给各个节点添加颜色属性来保证一棵树的平衡,那么下面我们就一起揭开红黑树神奇的面纱吧~。注:三叉树的旋转操作在avl树中进行了讲解,此篇文章不再赘述,有需要的朋友可以提前了解。转载 2023-08-08 14:53:39 · 205 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3,5,#,2,#}解析:原创 2022-02-14 23:26:41 · 111 阅读 · 0 评论 -
集五福
集五福题目描述:集五福作为近年来大家喜闻乐见迎新春活动,集合爱国福、富强福、和谐福、友善福、敬业福即可分享超大红包以0 和 1 组成的长度为 5 的字符串代表每个人所得到的福卡,每一位代表一种福卡,1 表示已经获得该福卡,单类型福卡不超过 1 张,随机抽取一个不超过 10 人团队,求该团队最多可以集齐多少套五福输入描述:输入类似 11010, 00110, 由 0、1 组成的长度为 5 的字符串,代表指定团队中每个人福卡获得情况注意 1:1 人也可以是一个团队注意 2:多人之间的福卡以英文逗原创 2021-10-21 22:38:12 · 297 阅读 · 0 评论 -
按身高和体重排队
按身高和体重排队题目描述:某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。输入描述:两个序列,每个序列由 n 个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。输出描述:排列结果,每个数值都是原始序列中的学生编号,编号从 1 开始示例 1输入:4100 100 120 13040原创 2021-10-21 19:14:09 · 4068 阅读 · 0 评论 -
转骰子
转骰子题目描述:骰子是一个立方体,每个面一个数字,初始为左 1,右 2,前 3(观察者方向),后 4,上 5,下 6,用 123456 表示这个状态,放置到平面上,可以向左翻转(用 L表示向左翻转 1 次),可以向右翻转(用 R 表示向右翻转 1 次),可以向前翻转(用 F 表示向前翻转 1 次),可以向后翻转(用 B 表示向后翻转 1 次),可以逆时针旋转(用 A表示逆时针旋转 90 度),可以顺时针旋转(用 C 表示顺时针旋转 90 度),现从 123456 这个初始状态开始,根据输入的动作原创 2021-10-19 17:31:17 · 1531 阅读 · 0 评论 -
字符串筛选排序
字符串筛选排序题目描述:输入一个由 n 个大小写字母组成的字符串,按照 Ascii 码值从小到大的排序规则,查找字符串中第 k 个最小ascii 码值的字母(k >= 1),输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为 0)。k 如果大于字符串长度,则输出最大 ascii 值的字母所在字符串的位置索引,如果有重复的字母,则输出字母的最小位置索引。输入描述:第一行输入一个由大小写字母组成的字符串第二行输入 k,k 必须大于 0,k 可以大于输入字符串的长度输出描述:输出原创 2021-10-17 22:39:22 · 2464 阅读 · 0 评论 -
删除排序链表中的重复元素 II
删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排原创 2021-10-17 19:07:06 · 73 阅读 · 0 评论 -
搜索旋转排序数组 II
搜索旋转排序数组 II已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,原创 2021-10-17 16:22:29 · 138 阅读 · 0 评论 -
删除有序数组中的重复项 II
删除有序数组中的重复项 II给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = remo原创 2021-10-15 17:19:05 · 54 阅读 · 0 评论 -
搜索二维矩阵
搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false提示原创 2021-10-15 15:27:54 · 57 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]原创 2021-10-15 14:37:10 · 58 阅读 · 0 评论 -
搜索旋转排序数组
搜索旋转排序数组整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums原创 2021-10-14 16:16:17 · 49 阅读 · 0 评论 -
删除有序数组中的重复项
删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDu原创 2021-10-14 13:18:32 · 52 阅读 · 0 评论 -
最接近的三数之和
最接近的三数之和题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <=原创 2021-10-13 17:52:36 · 70 阅读 · 0 评论 -
高效的任务规划
高效的任务规划题目描述:你有 n 台机器编号为 1~n,每台都需要完成完成一项工作,机器经过配置后都能完成独立完成一项工作。假设第 i 台机器你需要花 B 分钟进行设置,然后开始运行,J 分钟后完成任务。现在,你需要选择布置工作的顺序,使得用最短的时间完成所有工作。注意,不能同时对两台进行配置,但配置完成的机器们可以同时执行他们各自的工作。输入描述:第一行输入代表总共有 M 组任务数据(1 < M <= 10)。每组数据第一行为一个整数指定机器的数量 N(0 < N <=原创 2021-10-12 23:41:36 · 5014 阅读 · 6 评论 -
查找众数及中位数
查找众数及中位数题目描述:1.众数是指一组数据中出现次数量多的那个数,众数可以是多个2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以 2,所得的结果就是中位数3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数输入描述:输入一个一维整型数组,数组大小取值范围 0 < N < 1000,数组中每个元素取值范围 0 < E < 1000输出描述:输出众原创 2021-10-11 23:18:50 · 2227 阅读 · 0 评论 -
删除字符串中字符最少字符
删除字符串中字符最少字符题目描述:删除字符串中出现次数最少的字符,如果有多个字符出现次数一样,则都删除。输入描述:输入 abcdd字符串中只包含小写英文字母。输出描述:dd示例 1:输入abcdd输出dd#include<iostream>#include<string>#include<map>using namespace std;int main(){ string input_string; while(cin>>原创 2021-10-11 16:59:36 · 246 阅读 · 0 评论 -
数字字符串组合倒序
数字字符串组合倒序**题目描述:对数字,字符,数字串,字符串,以及数字与字符串组合进行倒序排列。字符范围:由 a 到 z,A 到 Z,数字范围:由 0 到 9符号“-”的定义(1)“-”做为连接符使用时作为字符串的一部分,例如“20-years”作为一个整体字符串呈现;(2)连续出现 2 个“-”及以上时视为字符串间隔符,如“out–standing"中的“-“视为间隔符,是2个独立整体字符串"out"和"standing";除了 1,2 里面定义的字符以外其他的所有字符,都是非法字符,作为字原创 2021-10-10 13:22:02 · 1545 阅读 · 0 评论 -
藏宝图
藏宝图题目描述:牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,它的子序列就有{ 空串,a,b,c,ab,ac,bc,abc }8 种。输入描述 :每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。输出描述 :输出一行“Yes”或者“No”表示结果。示例原创 2021-09-29 22:28:56 · 118 阅读 · 0 评论 -
独木桥
独木桥题目描述:在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中 L 是桥的长度)。坐标为 0 的点表示桥的起点,坐标为 L 的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是 S 到 T 之间的任意正整数(包括 S, T)。当青蛙跳到或跳过坐标为 L 的点时,就算青蛙已经跳出了独木桥。题目给出独木桥原创 2021-09-29 17:20:21 · 203 阅读 · 0 评论 -
多道批处理调度
多道批处理调度**题目描述:**某多处理器多道批处理系统一次允许将所有作业调入内存,且能并行执行,其并行数等于处理机个数。该系统采用 SJF 的调度方式(最短作业优先,系统在调度时,总是优先调度执行处理时间最短的作业)。现给定处理器个数 m,作业数 n,每个作业的处理时间分别为 t1,t2…tn。 当 n > m 时,首先处理时间短的 m 个作业进入处理器处理,其他的进入等待,当某个作业处理完成时,依次从等待队列中取处理时间最短的作业进入处理。求系统处理完所有作业的耗时为多少?注:不考虑作业切换的原创 2021-09-29 16:50:27 · 322 阅读 · 0 评论 -
股票最大收益
股票最大收益题目:假设知道某段连续时间内股票价格,计算通过买入卖出可获得的最大收益。输入一个大小为 n 的数 price(p1, p2, p3, p4…….pn), pi 是第i天的股票价格。pi 的格式为股票价格(非负整型)加上货币单位 Y 或者 S, 其中 Y 代表人民币, S 代表美元, 这里规定1 美元可以兑换 7 人民币。pi 样例 1:123Y 代表 123 元人民币pi 样例 2:123S 代表 123 元美元, 可兑换 861 人民币假设你可以在任何一天买入或者卖出胶票, 也原创 2021-09-26 23:04:02 · 506 阅读 · 0 评论 -
水果摊小买卖
水果摊小买卖**题目描述:**小王手里有点闲钱,想着做点卖水果的小买卖。给出两个数组 m、n,用 m[i]代表第 i 个水果的成本价,n[i]代表第 i 水果能卖出的价钱,假如现在有本钱 k,试问最后最多能赚多少钱?说明:1 每种水果只需买一次,只能卖一次2 数组 m、n 大小不超过 503 数组元素为正整数,不超过 1000输入描述:1 数组 m、n2 本钱 k备注:1 首行输入逗号分隔的数组 m 的元素值2 第二行输入逗号分隔的数组 n 的元素值3 第三行输入本钱输出描述:最原创 2021-09-26 14:32:41 · 1114 阅读 · 0 评论 -
水果搬运问题
水果搬运问题一组工人搬运一批水果,用一维数组存储工人编号和水果名称以及搬运重量,要求先按水果分组,然后按搬运重量排序输出。输入描述:第一行包括一个整数 N(1≤N≤100), 代表工人的个数。接下来的 N 行每行包括两个整数 p 和 q, 分别代表每个工人的编号和搬运重量,以及一个字符串 m, 代表水果的名称。输出描述:先按水果分组,然后按工人的搬运重量从小到大进行排序,并将排序后的信息打印出来。如果工人搬运的重量相同,则按照编号的大小从小到大排序,并且要求水果的输出次序同输入次序。示例 1原创 2021-09-23 16:54:11 · 1911 阅读 · 0 评论 -
搜索矩阵
搜索矩阵**题目描述:**实现一个程序 search_matrix(matrix), 参数 matrix 是一个仅包含 0 或 1 两种数字的矩阵,程序应返回输入矩阵中包含的最大正方形子矩阵(长和宽相等)的区域面积。例如 : 如果 matrix 是[“1010111111”, “000000011”, “1010110111”, “0000110001”, 那么它看起来像下面的阵:1010111111000000011110101101110000110001对于上面的输入, 最大的子矩阵是原创 2021-09-23 11:32:39 · 749 阅读 · 0 评论 -
猴子吃桃
猴子吃桃**题目描述:**孙悟空喜欢吃蟠桃,一天他乘守卫蟠桃园的天兵天将离开了而偷偷的来到王母娘娘的蟠桃园偷吃蟠桃。已知蟠桃园有 N 棵蟠桃树,第 i 棵蟠桃树上有 N[i](大于 0)个蟠桃,天兵天将将在 H(不小于蟠桃树棵数)小时后回来。孙悟空可以决定他吃蟠桃的速度 K(单位:个 / 小时),每个小时他会选则一颗蟠桃树,从中吃掉K 个蟠桃,如果这棵树上的蟠桃数小于 K,他将吃掉这棵树上所有蟠桃,然后这一小时内不再吃其余蟠桃树上的蟠桃。孙悟空喜欢慢慢吃,但仍想在天兵天将回来前将所有蟠桃吃完。求孙悟空可原创 2021-09-23 11:27:54 · 758 阅读 · 0 评论 -
三数之和
三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-105原创 2021-09-18 18:45:32 · 66 阅读 · 0 评论 -
罗马数字转整数
罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V +原创 2021-09-18 17:20:13 · 50 阅读 · 0 评论 -
盛最多水的容器
盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入原创 2021-09-18 10:05:17 · 58 阅读 · 0 评论 -
两数相加
两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9],原创 2021-09-17 23:03:13 · 64 阅读 · 0 评论 -
最长回文子串
**最长回文子串**给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成pair<int,int>expand(string s,原创 2021-09-17 16:52:09 · 49 阅读 · 0 评论 -
字符串压缩
字符串压缩通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序, 将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。压缩规则:仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"#include<iostream>#include<string>using namespace st原创 2021-09-15 19:48:08 · 387 阅读 · 0 评论 -
一个正整数到 Excel 编号之间的转换
一个正整数到 Excel 编号之间的转换题目描述:完成从一个正整数到 Excel 编号之间的转换。用过 excel 的都知道 excel 的列编号是这样的:abc…zaaabac…azbabbbc…yzzazbzc…zzaaaaabaac…分别代表以下编号:123…26272829…52535455…676677678679…702703704705…请写个函数,完成从一个正整数到这种字符串之间的转换。原型:intTranslate(intN, string & ans)功能:正整数原创 2021-09-13 14:25:20 · 865 阅读 · 0 评论 -
拆分自然数
拆分自然数题目描述一个 0-1000 的整数,拆解为一个(本身)或多个连续自然数的和,按照自然数的个数从少到多输出各个方案 input = solution,方案内的自然数按照从小到大排列分析:其实就是数学题: 若一个数n等于连续多个自然数之和,则由等差数列(a1+an)h/2== n,以及an-a1 == n-1,可解得 a1=(n*2/h-h+1)/2和an=a1+h-1(也就是该连续自然数的第一个数和最后一个数) 因为除法会带来误差,因此验证一下(a1+an)h==2n即可#include &原创 2021-09-08 23:35:12 · 159 阅读 · 0 评论 -
求数组中最大N个数和最小N个数的和
求数组中最大N个数和最小N个数的和题目描述输入一个数 M ,表示数组中有 M 个数输入 M 个数。输入 n求数组 M 中,去除重复值后,最大 n 个数和最小 n 个数的和注意:最大和最小的数中不能有重复值,否则输出 -1样例输入53 3 2 4 22样例输出-1说明去除重复后最大的2个数为[4,3],最小的2个数为[2,3];有相同值,所以返回-1样例输入53 3 2 4 21样例输出6说明去除重复后最大的1个数为[4],最小的1个数为[2];没有相同值,返回6原创 2021-09-08 22:32:14 · 2162 阅读 · 0 评论 -
leetcode 最长无重复子字符串
**无重复字符的最长子串**给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子原创 2020-11-20 13:21:22 · 101 阅读 · 0 评论