AlgorithmHero
这个作者很懒,什么都没留下…
展开
-
华为OD机试 C++【最大运输利润计算】
使用双重循环枚举货物 A 和货物 B 的数量组合,计算每种组合的总重量和总利润。当组合的总重量恰好等于货车的额定载重时,记录该组合的总利润,并不断更新最高利润值。老李每次发车时载货总重量刚好为货车额定的载货重量 wt,车上必须同时有货物 A 和货物 B ,货物A、B不可切割。第四列输入为货物 A 的单件运费利润 pa,0 < pa < 1000。第五列输入为货物 B 的单件运费利润 pb,0 < pb < 1000。第二列输入为货物 B 的单件重量 wb,0 < wb < 10000。原创 2024-07-25 08:31:33 · 14 阅读 · 0 评论 -
华为OD机试 C++【找到二进制中1的个数相同的最小较大数】
计算给定整数 n 的二进制表示中 1 的个数。然后,从 n + 1 开始逐个检查每个数,直到找到一个二进制表示中 1 的个数与 n 相同的数。如果使用高效方法,则通过位运算技巧找到 n 中第一个非拖尾的 0 位,将其置 1,并调整其后面的位,以保证 1 的个数相同且结果最小。输入一个正整数 n(1 ≤ n ≤ 1e9)现在求 m 的最小值。8对应二进制1000。其中1的个数都为1个。原创 2024-07-24 08:31:36 · 4 阅读 · 0 评论 -
华为OD机试 C++【精确最长匹配分词】
首先读取需要分词的句子和词库,并将句子按照标点符号分割成多个独立句子,将词库中的词汇存入HashSet中以便快速查找。然后依次处理每个句子,对于每个句子,从长到短截取子串,优先匹配最长的词汇。第二行输入中文词库 “i,love,china,ch,na,ve,lo,this,is,this,word”,词库长度限制:1 < length < 100000。给定一个连续不包含空格的字符串,该字符串仅包含英文小写字母及英文标点符号(逗号、分号、句号),同时给定词库,对该字符串进行精确分词。原创 2024-07-22 08:31:40 · 10 阅读 · 0 评论 -
华为OD机试 C++【园区参观路径计算】
创建一个二维数组 dp 来记录到达每个位置的路径数,初始化起点的路径数为1。对于每个可以参观的位置,路径数等于从上方和左方到达的路径数之和。通过逐行逐列地填充 dp 数组,最终在终点位置获得从起点到终点的所有不同路径数量。家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径。将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观。园区某部门举办了Family Day,邀请员工及其家属参加;原创 2024-07-19 08:31:54 · 22 阅读 · 0 评论 -
华为OD机试 C++【需求开发人力安排】
输入为 M 和 requirements,M 表示需求开发时间要求,requirements 表示每个需求工作量大小,N 为 requirements长度,当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。目前要求每个月最多有2个需求开发,并且每个月需要完成的需求不能超过部门人力。这部分需求需要在 M 个月内完成开发,进行人力安排后每个月人力时固定的。对于每一组测试数据,输出部门需要人力需求,行末无多余的空格。原创 2024-07-18 08:35:42 · 22 阅读 · 0 评论 -
华为OD机试 C++【单人卡牌游戏的最优出牌策略】
有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌中选取一张卡牌打出,接下来如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌,他可以继续将该手牌打出,直至手牌打光或者没有符合条件可以继续打出的手牌。如此循环通过这种方式,可以遍历所有可能的出牌序列,并找到打出最多手牌的最优策略。第二行为对应的每张手牌的颜色,用r y b g这4个字母分别代表4种颜色,字母也由空格分隔。现给定一副手牌,请找到最优的出牌策略,使打出的手牌最多。原创 2024-07-17 08:31:53 · 16 阅读 · 0 评论 -
华为OD机试 C++【5G基站最小连接成本计算】
然后,对所有未连接的边按成本排序,使用Kruskal算法选择最小成本的边,逐步合并基站并累计成本。现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同基站之间假设光纤的成本各不相同,且有些节点之间已经存在光纤相连。注意:基站的联通具有传递性,比如基站A与基站B架设了光纤,基站B与基站C也架设了光纤,则基站A与基站C视为可以互相联通。如果给定条件,可以建设成功互联互通的5G网络,则输出最小的建设成本。原创 2024-07-16 08:30:30 · 20 阅读 · 0 评论 -
华为OD机试 C++【安全攀登评估】
例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5 和 8,9,10,11,12,13,最高峰高度分别为 4,3。2 * 1 + 1 * 1 + 1 * 1 = 4 的体力,按照登山路线 0 → 3 → 0 需要消耗体力12。例如上图中的数组,有3个不同的山峰,登上位置在3的山可以从位置0或者位置6开始,从位置0登到山顶需要消耗体力 1 * 2 + 1 * 2 + 2 * 2 = 8,登山时会消耗登山者的体力(整数),原创 2024-07-15 08:31:55 · 10 阅读 · 0 评论 -
华为OD机试 C++【石头剪刀布游戏赢家判定】
读取每个玩家的ID和出拳形状,过滤掉无效的出拳形状(非A、B、C),并将有效的出拳形状分别存储在三个列表中。然后,根据每种出拳形状的数量,判断是否为平局或找出赢家,并将赢家的ID按字典序输出。输出为赢家的玩家ID列表(一个或多个),每个ID一行,按字符串升序排列。例如1:三个玩家出拳分别是A,B,C。2、当本场次中有且仅有一种出拳形状优于其他出拳形状,则该形状的玩家是胜利者。解释:玩家abc1出拳为石头(A)。例如2:三个玩家出拳分别是A,B,B。出拳形状:以英文大写字母表示,A、B、C形状。原创 2024-07-11 08:32:30 · 16 阅读 · 0 评论 -
华为OD机试 C++【局域网病毒感染时间计算】
一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用 t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1。给定一个数组 times 表示一台电脑把相邻电脑感染所用的时间。使用Dijkstra算法来计算从某一台电脑开始感染其它所有电脑所需的最短时间。如图:path[i] = {i, j, t} 表示:电脑 i->j,电脑 i 上的病毒感染 j,需要时间 t。原创 2024-07-10 08:34:04 · 14 阅读 · 0 评论 -
华为OD机试 C++【生成求和二叉树】
请由二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。2行整数,第1行表示二叉树的中序遍历,第2行表示二叉树的前序遍历,以空格分割。2、生成求和二叉树:通过递归计算每个节点的左子树和右子树的和,并更新节点值。3、中序遍历输出:对生成的求和二叉树进行中序遍历,收集节点值并输出。1、构建原二叉树:通过前序遍历和中序遍历数组,递归构建原二叉树。原创 2024-07-09 08:32:10 · 18 阅读 · 0 评论 -
华为OD机试 C++【月饼分配方案计数】
我们需要将 n 个月饼分配给 m 个员工,要求每个员工至少分 1 个月饼,并且相邻员工之间分配的月饼数差距不超过 3。可以通过递归的方法来解决这个问题,确保每个员工分配到的月饼数是升序的且相邻数值之间的差不超过 3。中秋节,公司分月饼,m 个员工,买了 n 个月饼,m ≤ n,每个员工至少分 1 个月饼,但可以分多个,每一行输入m n,表示m个员工,n个月饼,m ≤ n。问有多少种分月饼的方法?输出有多少种月饼分法。原创 2024-07-08 08:32:49 · 18 阅读 · 0 评论 -
华为OD机试 C++【停车场最少车辆统计】
特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。统计停车场最少可以停多少辆车,返回具体的数目。1、初始化计数器count为0,索引i为0。3、跳过所有空位(0),继续上述检查。4、遍历完成后,返回计数器count。整型数字字符串,表示最少停车数目。原创 2024-07-05 08:32:42 · 15 阅读 · 0 评论 -
华为OD机试 C++【计算绘制图形面积】
首行为两个整数 N 和 E,表示有N条指令,机器运行的横坐标终点值E,接下来N行 每行两个整数表示一条绘制指令x offsetY,用例保证横坐标x以递增排序的方式出现且不会出现相同横坐标x。绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。一个整数表示计算得到的面积 用例保证结果范围在0到4294967295之内。原创 2024-07-04 08:30:52 · 28 阅读 · 0 评论 -
华为OD机试 C++【最多派出的团队数量】
用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。4、如果组合后的能力值满足要求,则形成一个团队,并移动两个指针;否则,仅移动右指针尝试找到更大的数与当前左指针的数进行组合。2、初始化两个指针,一个指向数组的开头(左指针),一个指向数组的末尾(右指针)。3、从两端向中间扫描数组,尝试将左指针和右指针指向的元素组合成团队。第三行数值为团队要求的最低能力值,范围1-500000。原创 2024-07-03 08:32:56 · 22 阅读 · 0 评论 -
华为OD机试 C++【小明的身高排序】
首先读取小明的身高和其他小朋友的身高,然后将其他小朋友的身高存储在数组中。对数组进行排序,排序规则是先按与小明身高差的绝对值从小到大排序,如果绝对值相同,则按身高从小到大排序。小明今年升学到了小学1年级来到新班级后,发现其他小朋友身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序。第二行为n个正整数,h1 ~ hn分别是其他小朋友的身高,取值范围0<hi<200,且n个正整数各不相同。第一行为正整数 h和n,0<h<200 为小明的身高,0<n<50 为新班级其他小朋友个数。原创 2024-06-28 08:33:30 · 21 阅读 · 0 评论 -
华为OD机试 C++【按最低位排序的数组】
给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。使用 sort 方法和自定义比较器对数组进行排序。自定义比较器通过取每个整数的绝对值,并计算其最低位进行比较。读取用户输入的数组,并将输入字符串按逗号分割成字符串数组,然后将其转换为整型数组。给定一个非空数组,其元素数据类型为32位有符号整数,数组长度[1, 1000]原创 2024-06-27 08:33:52 · 18 阅读 · 0 评论 -
华为OD机试 C++【按身高和体重排序学生编号】
某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。定义一个学生类保存每个学生的编号、身高和体重信息。如果身高相同,则按体重升序排列;如果身高和体重都相同,则按原始编号升序排列。两个序列,每个序列由n个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。排列结果,每个数值都是原始序列中的学生编号,编号从1开始。原创 2024-06-26 08:30:46 · 21 阅读 · 0 评论 -
华为OD机试 C++【寻找最近的合法时间】
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的。形如HH:SS的字符串,表示推理处理的犯罪时间。1.可以保证现任给定的字符串一定是合法的。形如HH:SS字符串,表示原始输入。2.最近的时刻可能在第二天。原创 2024-06-25 08:31:25 · 16 阅读 · 0 评论 -
华为OD机试 C++【跳过数字4的计费表】
将表面读数视为跳过包含数字4的数字,逐位处理每个数字。如果当前位大于或等于4,则将其减1来跳过4,然后将处理后的每位数字按照9进制权重累加,最终得到实际的费用。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。给出计费表的表面读数,返回实际产生的费用。只有一行,数字N,表示里程表的读数。一个数字,表示实际产生的费用。23再多一块钱就变为25;原创 2024-06-24 08:33:01 · 14 阅读 · 0 评论 -
华为OD机试 C++【RSA因数分解】
RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。,则输出这两个素数;如果遍历完所有可能的因数后未找到符合条件的素数对,则输出“-1 -1”。如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1, -1。一个正整数 num 0 < num < 2147483647。解题思路是首先读取输入的32位正整数。原创 2024-06-21 08:33:43 · 28 阅读 · 0 评论 -
华为OD机试 C++【连续自然数和表达式】
为了找出一个整数T的所有可能的连续自然数之和的表达式,我们可以从1开始枚举到T的一半,尝试找到所有起点和终点使得这些自然数的和等于T。如果有多种表达式,输出要求为:自然数个数最少的表达式优先输出,每个表达式中按自然数递增的顺序输出,具体的格式参见样例。一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数。该整数的所有表达式和表达式的个数。原创 2024-06-20 08:32:54 · 33 阅读 · 0 评论 -
华为OD机试 C++【求数组组合最小和的k对元素】
首先初始化一个最小堆,将所有可能的元素对插入堆中,然后从堆中取出和最小的k对元素并计算它们的总和。通过堆的特性确保每次取出的都是当前最小的元素对,保证了结果的最小性。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值。输入两行数组array1、array2,每行首个数字为数组大小size(0 < size <= 100),0 < array1[i] <= 1000,0 < array2[i] <= 1000。原创 2024-06-19 08:00:00 · 33 阅读 · 0 评论 -
华为OD机试 C++【最大最小N数和】
首先对输入的数组去重,然后检查去重后的数组长度是否小于 2 * N,如果是则返回-1。否则,将去重后的数组进行排序,取出最小的N个数和最大的N个数,检查这些数是否有重叠。如果没有重叠,则计算这些数的和并返回,否则返回-1。给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。第三行输入N,N表达需要计算的最大、最小N个数。第一行输入M, M标识数组大小。第二行输入M个数,标识数组内容。输出最大N个数与最小N个数的和。原创 2024-06-11 08:15:00 · 22 阅读 · 0 评论 -
华为OD机试 C++【英文输入法】
首先从输入的语句中提取所有英文单词并去除标点符号,然后检查这些单词中哪些是以给定前缀开头的。如果没有找到匹配的单词,则输出前缀;否则按空格分隔输出匹配的单词序列。依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。3、输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号。输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割。2、缩略形式如”don’t”,判定为两个单词,”don”和”t”原创 2024-06-06 22:47:39 · 26 阅读 · 0 评论 -
华为OD机试 C++【字符串序列判定】
双指针遍历字符串L以查找字符串S的每个字符,两个指针分别指向S和L的当前位置,若当前字符匹配则记录匹配位置并将指向S的指针向前移动,指向L的指针始终向前移动直到遍历结束。若在遍历完L之后所有S的字符都找到,则返回最后一个匹配字符在L中的位置,若S中的字符未完全找到但找到了一部分,则返回最后一个匹配字符的位置,否则返回-1。(例如,S = ”ace” 是 L= ”abcde” 的一个子序列且有效字符是a、c、e,而”aec”不是有效子序列,且有效字符只有a、e)S 串最后一个有效字符在 L 中的位置。原创 2024-06-05 08:34:23 · 18 阅读 · 0 评论 -
华为OD机试 C++【考勤信息】
将员工的考勤数据字符串拆分为单个记录,然后依次检查每个记录。首先统计缺勤次数,如果超过一次则直接返回 false。接着检查是否有连续的迟到或早退,如果存在则返回 false。同时,滑动窗口检查每个连续的7天考勤记录,如果缺勤、迟到或早退的次数超过3次,则返回 false。最终,如果所有条件都满足,则返回 true,表示可以获得出勤奖。根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,3、任意连续7次考勤,缺勤/迟到/早退不超过3次。2、没有连续的迟到/早退;原创 2024-06-04 17:10:37 · 33 阅读 · 0 评论 -
华为OD机试 C++【最长的指定瑕疵度的元音子串】
先通过遍历字符串提取所有元音字符的索引,然后使用双指针滑动窗口方法在这些索引间寻找符合条件的子串。滑动窗口的左右指针表示子串的起始和结束位置,通过计算两个元音字符之间的非元音字符数量(瑕疵度)来判断是否满足条件。最终输出满足条件的最长子串长度。开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。输出为一个整数,代表满足条件的元音字符子串的长度。原创 2024-06-03 08:31:02 · 18 阅读 · 0 评论 -
华为OD机试 C++【字符串分割(二)】
对合并后的字符串每K个字符一组进行处理,统计每组中的大小写字母数量,根据数量决定是否转换大小写,最后将处理后的组与第一个子串一起用’-'连接输出。给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;原创 2024-06-02 21:00:07 · 21 阅读 · 0 评论 -
华为OD机试 C++【字符串筛选排序】
然后根据k的值,找到第k个最小的字符(如果k大于字符长度则找到最大的字符)。输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0),k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引,如果有重复字母则输出字母的最小位置索引。输入一个由N个大小写字母组成的字符,按照ASCII码值从小到大进行排序,查找字符串中第K个最小ASCII码值的字母(k>=1)输出字符串中第k个最小ASCII码值的字母所在字符串的位置索引。第二行输入k ,k必须大于0 ,k可以大于输入字符串的长度。原创 2024-06-02 20:57:09 · 16 阅读 · 0 评论 -
华为OD机试 C++【连续字母长度】
首先遍历输入字符串,计算每个字符连续出现的次数并记录下来,然后将这些连续出现次数按照从大到小排序,最后返回第k大的连续出现次数。给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。第一行有一个子串(1<长度<=100),只包含大写字母。输出连续出现次数第k多的字母的次数。原创 2024-05-30 07:52:11 · 17 阅读 · 0 评论 -
华为OD机试 C++【分解数】
当输入为1时,无法分解,直接输出"N";对于奇数n,直接分解为n/2和n/2+1;对于偶数n,找到其最大奇因数x,然后判断连续正整数数列的长度是奇数还是偶数:如果长度是偶数,则最短长度为n/x*2,起始数为x/2-(长度/2-1);如果长度是奇数,则调用函数 findMinOddSequenceLength() 求出最短奇数长度,然后计算起始数。给定一个正整数 n,如果能够分解为 m(m > 1)个连续正整数之和,请输出所有分解中,m最小的分解。如果给定整数无法分解为连续正整数,则输出字符串"N"。原创 2024-05-28 07:30:00 · 30 阅读 · 0 评论 -
华为OD机试 C++【攀登者】
例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5 和 8,9,10,11,12,13,最高峰高度分别为 4,3。用户输入一个表示地图高度的整型数组。然后遍历该数组,检查每个位置是否比其相邻的两个位置都高,如果是,则将其计数为一个山峰。地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。输出地图中山峰的数量。原创 2024-05-27 07:30:00 · 25 阅读 · 0 评论 -
华为OD机试 C++ 【防沉迷】
通过遍历注册的App信息,并根据查询时间点判断每个App是否在使用,如果在使用则比较其优先级,选择优先级最高的App名称打印出来。请编程实现,根据输入数据注册App,并根据输入的时间点,返回时间点使用的App名称,如果该时间点没有注册任何App,请返回字符串“NA”。“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。最后一行输入一个时间点,程序即返回该时间点使用的App。输出一个字符串,表示App名称,或NA表示空闲时间。请计算会议室占用时间段。原创 2024-05-24 07:30:00 · 24 阅读 · 0 评论 -
华为OD机试 C++【小区数量】
基于统计每个小区的人数,找到最大的小区人数。然后将所有小区的人数总和与最大的小区人数进行比较,取两者中较大的值作为结果,确保每个小朋友至少来自一个不同的小区。请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区?每个小朋友去了解与自己同一个小区的小朋友还有几个。我们将这些数量汇总到数组 garden 中。原创 2024-05-23 07:30:00 · 25 阅读 · 0 评论 -
华为OD机试 C++【求满足条件的最长子串的长度】
解题思路是通过滑动窗口法遍历字符串,同时维护当前窗口中的字母数量。首先检查字符串是否全是字母或全是数字,若是则直接返回 -1。然后用指针维护窗口边界,当窗口内字母数量超过一个时收缩左边界,确保每次窗口内只有一个字母。每次调整窗口后检查并更新满足条件的最长子串长度,最终返回结果。如果找不到满足要求的子串,如全是字母或全是数字,则返回-1。1、 只包含1个字母(a-z, A~Z),其余必须是数字;2、 字母可以在子串中的任意位置;字符串(只包含字母和数字)原创 2024-05-21 08:37:16 · 13 阅读 · 0 评论 -
华为OD机试 C++【时间调度】
为保障航班的有序起飞,调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序,最终获得安排好的航班的起飞顺序。这个问题的解决思路是首先根据航空公司的缩写进行排序,然后再按照航班号的后4位数字进行排序。A市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。航班号为6为长度,后4位位纯数字,不考虑存在后4位重复的场景。原创 2024-05-17 08:33:21 · 22 阅读 · 0 评论 -
华为OD机试 C++【空闲时间】
首先按照会议开始时间对会议进行排序,然后通过遍历排序后的会议时间段,合并重叠的会议时间段,最后输出合并后的会议时间段。之后输入n行,每行两个整数,以空格分隔,分别表示会议开始时间,会议结束时间。输出多行,每个两个整数,以空格分隔,分别表示会议室占用时间段开始和结束。第一行输入一个整数 n,表示会议数量。会议1开始时间, 会议1结束时间。会议2开始时间, 会议2结束时间。请计算会议室占用时间段。原创 2024-05-15 08:36:03 · 19 阅读 · 0 评论 -
华为OD机试 C++【整数求和】
遍历输入字符串的字符数组,检查每个字符是否是数字字符。如果是数字字符,则将其添加到总和中,否则检查是否是负号,如果是,则将后续数字字符转换为负数并从总和中减去。2)负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023。1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102。输入字符串s,输出s中包含所有整数的最小和。字符串s,只包含 a-z A-Z ±;原创 2024-05-14 08:35:41 · 66 阅读 · 0 评论 -
华为OD机试 c++【数组处理】
将输入的乱序数组转换为整数数组,并使用 Map 统计每个元素的出现次数。然后对元素进行排序,按照出现次数从高到低排序,如果出现次数相同,则按照元素值的先后顺序排序。最后将排序后的结果输出。给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。原创 2024-05-13 08:36:05 · 18 阅读 · 0 评论