2024华为OD机试卷(java\python\c++)全部+详细解析+机试攻略介绍

收藏本博客于书签栏能更便捷实用哦。

机试攻略介绍

OD机试三道题目

难度分值
第一题简单题范畴,难度系数在1-3之间100分
第二题简单题范畴,难度系数在1-3之间100分
第三题复杂题范畴,难度系数>=3200分

三道题总计400分,考试时长为150分钟,为什么难度系数是1-3之间而不是小于3,因为有少部分的简单题要用到复杂题的算法,这并不比复杂题容易做出来。

考试要求

考试场景要求通过分值
情况一>=150分
情况二>=300分
情况三>=350分

ps:不同考试场景所要求分值不一样,这取决于部门、业务线以及是否离职状态中等因素,总之分数考的越高越有利。

考试攻略

结合自身情况来看,如果本身是精通算法,一力破万法即可。如果算法能力略微欠缺一点,就要综合考虑怎么最程度去得分了。

针对于情况一:所有精力优先全部投在前两个题,彻底忘记第三题。考试时间有限,绝大部分人在应试时候是比较紧张的,思考能力有所下降,很慢进入考试状态。

针对于情况二:最先做第三题,如果第三题做不出来,前两题全对也白搭。第三题全部用例通过,再回首做第一题即可。如果第三题的用例能通过50%以上,那么就需要再去做前两题并且要100%通过。

针对于情况三:没的说,必须三个题全对,350分和400分没区别,还是先做第三题,第三题做不出来就不需要浪费时间去做剩下两个题了

知识点:数据结构(数组、集合、树....)+算法(排序、递归、动态规划...),在不同的题型中以不同组合出现,但这并不唯一,如果你非常擅长数组的操作,实际中可以把其它数据结构先转化成数组再做算法的操作,常规所指的暴力破解(就是两个for循环)实际可以解出来非常多的简单、中等题,复杂题存在超限的问题,并且这种方式真的很节省做题的时间还能帮助你快速预热进入解题状态。

注意事项

题库基本每个阶段都在更新比如A、B、C、D卷,所以要及时收藏解读呦,机试通过后,在接下来的技术一面和二面中,大概率还是会让手撕机试的题,所以机试通过务必认真回溯每一行代码。机试通过只相当于通过全部面试的30%,后续的每一个环节都很重要。

目录实用技巧

题目有很多,名称相似的也很多,可以在本页面ctrl+f调出搜索,搜索题目名称或者题目描述中的关键一段连续的描述,点击蓝色题目名称可以直接跳转到具体解法

真题目录

C、D卷简单中等题:

序号题目名称难度系数分值题目描述
1分配土地(试读)1100从前有个村庄,村民们喜欢在各种田地上插上小旗子
2掌握的单词个数(试读)1100有一个字符串数组Q words 和一个字符串 chars,假如可以用 chars 中的字母拼写出 words 中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。
3小明的幸运数1100小明在玩一个游戏,游戏规则只如下:
在游戏开始前,小明站在 坐标轴只原点处(坐标值为0)给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指令前进指定步数或者后退指定步数。前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走,幸运数为一个整数,如果某个指令正好和幸运数相等,则小明行进步数+1。
4会议室占用时间1100现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间,格式为:
[[会议1开始时间,会议1结束时间],[会议2开始时间,会议2结束时间]]
请计算会议室占用时间段。
5求字符串中所有整数的最小和1100输入字符串as,输出s中包含所有整数的最小和。
说明:
字符串Qs,只包含 a-z A-Z±;
合法的整数包括
1)正整数 一个或者多个0-9组成,如 023 002 102
2)负整数 负号-开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023
6字符串变换最小字符串1100给定一个字符串只s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典席进行比较)
变换规则:交换字符串中任意两个不同位置的字符。
7整型数组按个位值排序1100给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持
当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。
8最富裕的小家庭1100在一颗树中,每个节点代表一个家庭成员,节点的 数字表示 其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。
现给你一颗树,请计算出最富裕的小家庭的财富和。
9内存冷热标记1100现代 计算机系统 中通常存在多级的存储设备,针对海量 workload 的优化的一种思路是将热点内存页优先放到快速存储层级,这就需要对内存页进行记。
一种典型的方案是基于内存页的访问频次进行标记,如果统计窗口内访问次数大于等于设定阈值,则认为是热内存页,否则是冷内存页。
对于统计窗口内跟踪到的访存序列和阈值,现在需要实现基于频次的冷热标记。内存页使用页框号作为标识。
10计算三叉搜索树的高度3100定义构造三叉搜索树规则如下:
每个节点都存有一个数,当插入一个新的数时,从 根节点 向下寻找,直到找到一个合适的空节点插入。查找的规则是:
1. 如果数小于节点的数减去500,则将数插入节点的左子树
2. 如果数大于节点的数加上500,则将数插入节点的右子树
3. 否则,将数插入节点的中子树
给你一系列数,请按以上规则,按顺序将数插入树中,构建出一棵三叉搜索树,最后输出 树的高度 。
11生成哈夫曼树3100给定长度为 n 的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。
请完成一个函数,根据输入的数字数组,生成 哈夫曼树 ,并将哈夫曼树按照中序遍历输出。
为了保证输出的 二叉树中序遍历 结果统一,增加以下限制:
二叉树节点中,左节点权值小于右节点权值,根节点权值为左右节点权值之和。当左右节点权值相同时,左子树高度小于等于右子树高度。
12堆内存申请3100有一个总空间为100字节的堆,现要从中新申请一块内存, 内存分配 原则为:优先紧接着前一块已使用内存,分配空间足够且最接近申请大小的空闲内存。
13拼接URL1100给定一个url前缀和url后缀,通过,分割 需要将其连接为一个完整的url
如果前缀结尾和后缀开头都没有/,需要自动补上/连接符
如果前缀结尾和后缀开头都为/,需要自动去重
14靠谱的车1100程序员 小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
15求最多可以派出多少支团队1100用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。
16开源项目热度榜单2100某个 开源社区 希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。
对于每个 开源项目 ,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。
数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热度根据这5个维度的加权求和进行排序。
17小华地图寻宝3100小华按照地图去寻宝,地图上被划分成 m 行和 n 列的方格,横纵坐标范围分别是 [0, n-1] 和 [0, m-1]。
在横坐标和纵坐标的数位之和不大于 k 的方格中存在黄金(每个方格中仅存在一克黄金),但横坐标和纵坐标之和大于 k 的方格存在危险不可进入。小华从入口
(0,0) 进入,任何时候只能向左,右,上,下四个方向移动一格。
请问小华最多能获得多少克黄金?
18分披萨3100"吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的 服务员 将披萨切成了每块大小都完全不同奇
数块,且肉眼能分辨出大小。
由于两人都想吃到最多的披萨,他们商量了一个他们认为公平的分法:从"吃货"开始,轮流取披萨。除了第一块披萨可以任意选取外,其他都必须从缺口开始选。
他俩选披萨的思路不同。"馋嘴"每次都会选最大块的披萨,而且"吃货"知道"馋嘴"的想法。
已知披萨小块的数量以及每块的大小,求"吃货"能分得的最大的披萨大小的总和。
19精准核酸检测3100为了达到新冠疫情精准防控的需要,为了避免全员 核酸检测 带来的浪费,需要精准圈定可能被感染的人群。
现在根据传染病流调以及 大数据分析 ,得到了每个人之间在时间、空间上是否存在轨迹交叉。
现在给定一组确诊人员编号(X1,X2,X3,...,Xn),在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检
测)
需要进行核酸检测的人,是病毒传播链条上的所有人员,即有可能通过确诊病例所能传播到的所有人。
例如:A是确诊病例,A和B有接触、B和C有接触、C和D有接触、D和E有接触,那么B\C\D\E都是需要进行核酸检测的人。
20英文输入法1100主管期望你来实现英文 输入法 单词联想功能。
需求如下:
依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,
如果联想不到,请输出用户输入的单词前缀。
注意:
1. 英文单词联想时,区分大小写
2. 缩略形式如”don’t”,判定为两个单词,”don”和”t”
3. 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号
21查找众数及中位数1100众数是指一组数据中出现次数量多的那个数,众数可以是多个。
中位数 是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除
以2,所得的结果就是中位数。
查找整型 数组中元素的众数并组成一个新的数组,求新数组的中位数。
22数组连续和1100给定一个含有N个正整数的数组, 求出有多少个连续区间(包括单个正整数), 它们的和大于等于x。
23螺旋数字矩阵3100疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:
给出数字个数 n (0 < n ≤ 999)和行数 m(0 < m ≤ 999),从左上角的 1 开始,按照顺时针螺旋向内写方式,依次写出2,3,....,n,最终形成一个 m 行矩阵。
小明对这个矩阵有些要求:
1. 每行数字的个数一样多
2. 列的数量尽可能少
3. 填充数字时优先填充外部
4. 数字不够时,使用单个 * 号占位
24机器人搬砖1100机器人 搬砖,一共有 N 堆砖存放在 N 个不同的仓库中,第 i 堆砖中有 bricks[i] 块砖头,要求在 8 小时内搬完。
机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格只在这一个小时有效,为使得机器人损耗最小化,应尽量减小每
次补充的能量格数。
为了保障在 8 小时内能完成搬砖任务,请计算每小时给机器人充能的最小能量格数。
无需考虑机器人补充能力格的耗时;
无需考虑机器人搬砖的耗时;
机器人每小时补充能量格只在这一个小时中有效;
25执行任务赚积分3100现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。
每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。
可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。
26攀登者11100攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。
地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。
例如:[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。最高峰位置分别为3,10。
一个山脉可能有多座山峰(高度大于相邻位置的高度,或在地图边界且高度大于相邻的高度)。
登山者想要知道一张地图中有多少座山峰。
27测试用例执行计划1100某个产品当前迭代周期内有 N 个特性(F1,F2,......FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其 ID 作为下标进行标识。
设计了 M 个 测试用例 (T1,T2,......,TM),每个测试用例对应一个覆盖特性的集合,测试用例使用其 ID 作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先
级之和。
在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例 ID 小的先执行。
28连续字母长度1100给定一个 字符串 ,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。
29整数对最小和1100给定两个整数数组array1、array2,数组元素按 升序排列 。
假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,
并对取出的所有元素求和,计算和的 最小值 。
注意:
两对元素如果对应于array1、array2中的两个下标均相同,则视为同一对元素。
30绘图机器1100绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。
1. 尝试沿着横线坐标正向绘制直线直到给定的终点E
2. 期间可以通过指令在纵 坐标轴 方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移
给定的横坐标终点值E 以及若干条绘制指令,
请计算绘制的直线和横坐标轴以及x=E的直线组成的图形面积。
31智能成绩表2100小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?
32小明找位置1100小朋友出操,按学号从小到大排成一列;
小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。
算法复杂度 要求不高于nLog(n);学号为整数类型,队列规模 ≤ 10000;
33悄悄话1100给定一个 二叉树 ,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。
初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。
34手机App防沉迷系统3100智能手机方便了我们生活的同时,也侵占了我们不少的时间。
“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。
它的大概原理是这样的:
1. 在一天24小时内,可以注册每个App的允许使用时段
2. 一个时间段只能使用一个App,举例说明:不能同时在9:00-10:00注册App2和App3
3. App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段,如果App的优先级相
同,则后添加的App不能注册。
35求满足条件的最长子串的长度1100给定一个 字符串 ,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度,字符串本身是其最长的子串,子串要求:
1、 只包含1个字母(a~z, A~Z),其余必须是数字;
2、 字母可以在子串中的任意位置;
如果找不到满足要求的子串,如全是字母或全是数字,则返回-1。
36查找接口成功率最优时间段1100服务之间交换的接口成功率作为 服务调用 关键质量特性,某个时间段内的接口失败率使用一个数组表示,
数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,
给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,
找出数组中最长时间段,如果未找到则直接返回NULL。
37按身高和体重排队1100某学校举行 运动会 ,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的
编号顺序关系。请输出排列后的学生编号。
38最长子字符串的长度(一)1100给你一个字符串 s,首尾相连成一个环形,请你在环中找出 ‘o’ 字符出现了偶数次最长 子字符串 的长度。
39虚拟理财游戏3100在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。
现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。
你要在可接受范围内选择最优的投资方式获得最大回报。
备注:
在虚拟游戏中,每项投资风险值相加为总风险值;
在虚拟游戏中,最多只能投资2个理财产品;
在虚拟游戏中,最小单位为整数,不能拆分为小数;
投资额*回报率=投资回报
40API集群负载统计 1100某个产品的RESTful API集合部署在 服务器 集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载
均衡,现在需要实现热点信息统计查询功能。
RESTful API是由多个层级构成,层级之间使用 / 连接,如 /A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。
现在 负载均衡 模块需要知道给定层级上某个名字出现的频次,未出现过用0表示,实现这个功能。
41密码解密1100给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。
映射的规则('a' ~ 'i')分别用('1' ~ '9')表示;('j' ~ 'z')分别用("10*" ~ "26*")表示。
约束:映射始终唯一。
42灰度图存储 2100黑白图像常采用 灰度图 的方式存储,即图像的每个像素填充一个灰色阶段值,256阶灰图是一个灰阶值取值范围为 0~255 的灰阶矩阵,0表示全黑,255表示全白,范围内
的其他值表示不同的灰度。
但在计算机中实际存储时,会使用压缩算法,其中一个种压缩格式描述如如下:
10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 21
1. 所有的数值以空格分隔;
2. 前两个数分别表示矩阵的行数和列数;
3. 从第三个数开始,每两个数一组,每组第一个数是灰阶值,第二个数表示该灰阶值从左到右,从上到下(可理解为二维数组按行存储在一维矩阵中)的连续像素个数。
比如题目所述的例子, “255 34” 表示有连续 34 个像素的灰阶值是 255。
如此,图像软件在打开此格式灰度图的时候,就可以根据此算法从压缩数据恢复出原始灰度图矩阵。
请从输入的压缩数恢复灰度图原始矩阵,并返回指定像素的灰阶值。
43字符串序列判定1100输入两个字符串 S 和 L ,都只包含英文小写字母。S长度 ≤ 100,L长度 ≤ 500,000。判定S是否是L的有效子串。
判定规则:S 中的每个字符在 L 中都能找到(可以不连续),且 S 在L中字符的前后顺序与 S 中顺序要保持一致。(例如,S = ” ace ” 是 L= ”abcde” 的一个子序列且有效
字符是a、c、e,而”aec”不是有效子序列,且有效字符只有a、e)
44素数之积1100RSA加密算法 在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。
45找朋友1100在学校中,N个小朋友站成一队, 第i个小朋友的身高为height[i],
第i个小朋友可以看到的第一个比自己身高更高的小朋友j,那么j是i的好朋友(要求j > i)。
请重新生成一个列表,对应位置的输出是每个小朋友的好朋友位置,如果没有看到好朋友,请在该位置用0代替。
小朋友人数范围是 [0, 40000]。
46转盘寿司1100寿司店周年庆,正在举办 优惠活动 回馈新老客户。
寿司转盘上总共有 n 盘寿司,prices[i] 是第 i 盘寿司的价格,
如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是 prices[j] < prices[i],如果没有满足条件的 j,则不赠送寿司。
每个价格的寿司都可无限供应。
47分割均衡字符串1100均衡串定义: 字符串 中只包含两种字符,且这两种字符的个数相同。
给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。
约定:字符串中只包含大写的 X 和 Y 两种字符。
48CPU算力分配1100现有两组 服务器 A和B,每组有多个算力不同的CPU,其中 A[i] 是 A 组第 i 个CPU的运算能力,B[i] 是 B组 第 i 个CPU的运算能力。
一组服务器的总算力是各CPU的算力之和。
为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换,
求两组服务器中,用于交换的CPU的算力,并且要求从A组服务器中选出的CPU,算力尽可能小。
49小朋友来自多少小区1100幼儿园组织活动,老师布置了一个任务:
每个小朋友去了解与自己同一个小区的小朋友还有几个。
我们将这些数量汇总到数组 garden 中。
请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区?
50字符串分割(二)1100给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有 大写字母转换为小写 字母;
反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
51执行时长1100为了充分发挥 GPU 算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。
假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。
52解密犯罪时间1100警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。
根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离 当前时间 最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。
53找座位1100在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。
现在给出一排观众座位 分布图 ,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。
54游戏分组1100部们准备举办一场 王者荣耀 表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。
每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。
一队的实力可以表示为这一队 5 名队员的评分总和。
现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队,最后输出这两组的实力差绝对值。
例:10 名参赛者的评分分别为:5 1 8 3 4 6 7 10 9 2,分组为(1 3 5 8 10)和(2 4 6 7 9),两组实力差最小,差值为1。有多种分法,但是实力差的绝对值最小为1。
55剩余银饰的重量1100有 N 块 二手市场 收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。
每一回合,从中选出三块最重的银饰,然后一起熔掉。
假设银饰的重量分别为 x 、y和z,且 x ≤ y ≤ z。那么熔掉的可能结果如下:
如果 x = y = z,那么三块银饰都会被完全熔掉;
如果 x = y 且 y != z,会剩余重量为 z - y 的银块无法被熔掉;
如果 x != y 且 y = z,会剩余重量为 y - x 的银块无法被熔掉;
如果 x != y 且 y != z,会剩余重量为 z - y 与 y - x 差值 的银块无法被熔掉。
最后,如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可)如果只剩下一块,回该块的重量,如果没有剩下,就返回 0
56来自异国的客人1100有位客人来自异国,在该国使用 m 进制计数。
该客人有个 幸运数字 n(n < m),每次购物时,其总是喜欢计算本次支付的花费(折算为异国的价格后)中存在多少幸运数字。
问:当其购买一个在我国价值 k 的产品时,其中包含多少幸运数字?
57火星文计算21100已知火星人使用的 运算符 为#、$,其与地球人的等价公式如下:
x#y = 4*x+3*y+2
x$y = 2*x+y+3
1. 其中 x、y 是无符号整数
2. 地球人公式按C语言规则计算
3. 火星人公式中,#的优先级高于$,相同的运算符,按从左到右的顺序计算
现有一段火星人的字符串报文,请你来翻译并计算结果。
58最长的指定瑕疵度的元音子串1100开头和结尾都是 元音字母 (aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如:
1. “a” 、 “aa”是元音字符串,其瑕疵度都为0
2. “aiur”不是元音字符串(结尾不是元音字符)
3. “abira”是元音字符串,其瑕疵度为2
给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。
子串:字符串中任意个连续的字符组成的 子序列 称为该字符串的子串。
59用连续自然数之和来表达整数2100一个整数可以由连续的自然数之和来表示。
给定一个整数,计算该整数有几种连续自然数之和的 表达式 ,且打印出每种表达式
60密码输入检测1100给定用户密码 输入流 input,输入流中字符 '<' 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。
密码安全要求如下:
1. 密码长度 ≥ 8;
2. 密码至少需要包含 1 个大写字母;
3. 密码至少需要包含 1 个小写字母;
4. 密码至少需要包含 1 个数字;
5. 密码至少需要包含 1 个字母和数字以外的非空白特殊字符;
注意空串退格后仍然为空串,且 用户输入 的字符串不包含 '<' 字符和空白字符。
61围棋的气2100围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。
“气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知:
1. 在棋盘的边缘上的棋子最多有 3 口气(黑1),在棋盘角点的棋子最多有2口气(黑2),其他情况最多有4口气(白1)
2. 所有同色棋子的气之和叫做该色棋子的气,需要注意的是,同色棋子重合的气点,对于该颜色棋子来说,只能计算一次气,比如下图中,黑棋一共4口气,而不是5口气,因为
黑1和黑2中间红色三角标出来的气是两个黑棋共有的,对于黑棋整体来说只能算一个气。
3. 本题目只计算气,对于眼也按气计算,如果您不清楚“眼”的概念,可忽略,按照前面描述的规则计算即可。
现在,请根据输入的黑棋和白棋得到坐标位置,计算黑棋和白棋一共各有多少气?
62最多购买宝石数目1100橱窗里有一排宝石, 不同的 宝石对应不同的价格,宝石的价格标记为 gems[i]
0 ≤ i < n
n = gems.length
宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;
例如客户最大购买宝石个数为m,购买的宝石编号必须为:gems[i],gems[i+1],...,gems[i+m-1]
0 ≤ i < n
m ≤ n
假设你当前拥有总面值为 value 的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回0。
63求幸存数之和1100给一个正整数数列 nums,一个跳数 jump ,及幸存数量 left。
运算过程为:从索引0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止,然后返回幸存数之和。
约束:
1. 0是第一个起跳点
2. 起跳点和命中点之间间隔 jump 个数字,已被敲出的数字不计入在内。
3. 跳到末尾时无缝从头开始(循环查找),并可以多次循环。
4. 若起始时 left > len(nums) 则无需跳数处理过程。
64数组去重和排序1100给定一个乱序的数组, 删除所有 的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。
65考勤信息1100公司用一个 字符串 来表示员工的出勤信息
absent:缺勤
late:迟到
leaveearly:早退
present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
缺勤不超过一次;
没有连续的迟到/早退;
任意连续7次考勤,缺勤/迟到/早退不超过3次。
66寻找身高相近的小朋友1100小明今年升学到了小学1年级来到新班级后,发现其他 小朋友 身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序。
67数的分解2100提取字符串中的最长合法简单 数学表达式 ,字符串长度最长的,并计算表达式的值。如果没有,则返回 0 。
简单数学表达式只能包含以下内容:
0-9数字,符号+-*
说明:
1. 所有数字,计算结果都不超过long
2. 如果有多个长度一样的,请返回第一个表达式的结果
3. 数学表达式,必须是最长的,合法的
4. 操作符不能连续出现,如 +--+1 是不合法的
68机场航班调度程序1100XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。
但是XX市机场只有一条起飞跑道,调度人员需要安排目前停留在机场的航班有序起飞。
为保障航班的有序起飞,调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序,最终获得安排好的航
班的起飞顺序。
请编写一段代码根据输入的航班号信息帮助调度员输出航班的起飞顺序。
说明:
航空公司缩写排序按照从 特殊符号 $ & *,0~9,A~Z排序;
69多段线数据压缩1100下图中,每个方块代表一个像素,每个像素用其行号和列号表示。
为简化处理,多线段的走向只能是水平、竖直、斜向45度。
上图中的多线段可以用下面的坐标串表示:(2,8),(3,7),(3,6),(3,5),(4,4),(5,3),(6,2),(7,3),(8,4),(7,5)。
但可以发现,这种表示不是最简的,其实只需要存储6个蓝色的关键点即可,它们是线段的起点、拐点、终点,而剩下4个点是冗余的。
现在,请根据输入的包含有冗余数据的多线段坐标列表,输出其最简化的结果。
70字符串筛选排序1100输入一个由N个大小写字母组成的字符串
按照 ASCII码 值从小到大进行排序
查找字符串中第K个最小ASCII码值的字母(k>=1)
输出该字母所在字符串中的 位置索引 (字符串的第一个位置索引为0)
k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引
如果有重复字母则输出字母的最小位置索引
71最大N个数与最小N个数的和1100给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
数组中数字范围[0, 1000]
最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
72停车场车辆统计1100特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。
车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。统计停车场最少可以停多少辆车,返回具体的数目。

  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述: 给定一个字符串 s ,请你找出其中最长的不含重复字符的子串长度。 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 思路分析: 用一个 hash 表存储每个字符最后一次出现的位置。遍历字符串,记录当前子串的起始位置 start 和当前位置 i,当遇到重复字符时,更新 start 的位置。最后更新最长子串的长度。 代码实现: Python: class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ hash_map = {} res = 0 start = 0 for i in range(len(s)): if s[i] in hash_map and hash_map[s[i]] >= start: start = hash_map[s[i]] + 1 hash_map[s[i]] = i res = max(res, i - start + 1) return res Java: class Solution { public int lengthOfLongestSubstring(String s) { int[] hash_map = new int[256]; int res = 0; int start = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (hash_map[c] >= start) { start = hash_map[c] + 1; } hash_map[c] = i; res = Math.max(res, i - start + 1); } return res; } } C++: class Solution { public: int lengthOfLongestSubstring(string s) { vector<int> hash_map(256, -1); int res = 0; int start = 0; for (int i = 0; i < s.size(); i++) { char c = s[i]; if (hash_map[c] >= start) { start = hash_map[c] + 1; } hash_map[c] = i; res = max(res, i - start + 1); } return res; } }; 总结: 这道题考察了字符串的基础操作和 hash 表的使用。通过本题的练习,可以在实际开发中更加熟练地使用 hash 表,提高代码效率和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值