京东8.24算法岗笔试

由于选择题20个咱也实在是记不住(其实也没人关心🤣)所以后续就只展示算法题,我自己当时是只做出来1.1道。代码是我在考完后又复盘的时候完善的。由于我是markdown写的,所以部分地方可能看起来很奇怪,原始版本和代码可以去我的主页lx02918.github.io去看,欢迎大家评论指正(我就怕我自己的代码有啥问题,如果有问题请各位一定要指出来,我马上改!)

第一题
给你一个整数,请你判断0 ~ N之间有多少个数是100的正整数倍。

输入描述:

输入的第一行给出一个整数N 输出描述:输出0~N之间有多少个数是100的整数倍。

输出描述:

输出0 ~ N之间有多少个数是100的整数倍。

示例1:

输入:2000

输出:20

思路
签到题,直接用 N 去掉最后两位就可以,能够避免出现负数。

第二题
给定一个大小为 n * m 的网格板,网格板是由 n * m 个 1 * 1 的单元格组成,最初所有单元格都是 白色 的;现在给出K个操作:

𝑐 𝑥 𝑦  将位置为 (𝑥,𝑦) 的单元格涂成黑色

𝑙 𝑥 𝑦 将位置为  (𝑥,𝑦) 的单元格向左寻找第一个白色单元格,将其涂成黑色

𝑟 𝑥 𝑦 将位置为 (𝑥,𝑦) 的单元格向右寻找第一个白色单元格,将其涂成黑色

𝑢 𝑥 𝑦 将位置为 (𝑥,𝑦) 的单元格向上寻找第一个白色单元格,将其涂成黑色

𝑑 𝑥 𝑦 将位置为 (𝑥,𝑦) 的单元格向下寻找第一个白色单元格,将其涂成黑色

注意:网格板左上角的单元格是 (1,1)

输入描述: 第一行给定 n, m, k 分别代表网格板大小和操作次数

后续给出为每次操作的命令 𝑠𝑖,𝑥𝑖,𝑦𝑖s

1 <= n, m <= 100

1 <= k <= 10^4
1 <= 𝑥𝑖,𝑦𝑖 <= 𝑛 , 𝑚

输出描述:

对于以 l, r, u, d 为操作的给出对应的坐标。没有坐标输出 -1。

示例1:

输入:

5 5 20
c 2 4
c 4 2
r 3 5
c 4 4
c 5 2
u 5 2
c 3 2
c 1 4
l 4 4
c 3 5
c 5 3
c 3 3
c 3 1
u 1 4
c 3 4
r 1 1
d 3 3
d 3 4
c 1 1
c 5 4

输出:

-1
3 2
4 3
-1
1 2
4 3
5 4
思路
初始化网格之后我们需要将所有元素初始化为False。

定义一个函数 find ,借助这个函数对x, y进行操作。需要使用到两个方向增量 d1, d2。

跳出条件为到达边界或找到未占位的我位置。

操作上按照四个方向进行操作,同时遇到 c 直接变为 True

第三题
有 n 根木棍排成一列,第 i 根木棍的长度为 𝑎𝑖。

请你从中选出一个最长的子区间,使得区间内任意三根木棍都能构成一个三角形。只需要输出选中的区间端点即可。

输入描述:

第一行整数 n ,表示木棍的数量

第二行n个整数 第 𝑖 个整数 𝑎𝑖,表示第 𝑖 根木棍的长度

输出描述: 输出两个整数,表示最长的满足条件的区间的两个端点,如果有多个满足条件的,输出左端点最小的区间。

思路
区间直接考虑到我们的滑动窗口。

首先固定好我们滑动窗口的两个边界,然后不断进行遍历,更新最大长度。滑动窗口内需要在 最小值 + 次小值 <= 最大时对右侧边界进行操作。这里我们获取最小值和次小值的方法是借助了 SortedList()。在更新后记录边界,最后输出即可。

这题的关键点就在于滑动窗口和有序集合,有序集合可以大大减少我们的代码量。

这里举我自己的反例,我当时由于太紧张,直接考虑到指针了,虽然考虑到 sort() 去排序,但是我后续的思路错了,结果这道题就失误了。

这里还要说一下,我的代码是python写的,如果有需要其他版本的可以去Chat GPT上把该题的完整部分复制到里面让GPT去翻译,这样的准确度也会更高一些,啾咪💖#牛客创作赏金赛#
全部评论
第二道题的输入输出是匹配的嘛?感觉有点奇怪?
点赞 回复 分享
发布于 2024-09-20 13:40 上海
现在最慌选择题,我看选择题java c c++ sql混着出,但是我概念清晰的只有c++。。。。
点赞 回复 分享
发布于 2024-09-13 16:29 俄罗斯
给面了吗
点赞 回复 分享
发布于 2024-08-27 02:26 吉林

相关推荐

第一次笔试,我非常垃圾,涉及Pandas和python1、数据去重:&nbsp;“按&nbsp;X&nbsp;去重,保留&nbsp;ID&nbsp;最大的”按照x排列df_sorted=df.sort_values(by='x')#&nbsp;按x分组,取id最大值result=df_sorted.groupby('x')['id'].max().reset_index()print(result)2、计算每个种类的违约率import&nbsp;pandas&nbsp;as&nbsp;pd#&nbsp;构造数据(根据手写内容,假设&nbsp;class&nbsp;和&nbsp;tar&nbsp;的对应关系如下)data&nbsp;=&nbsp;{&quot;class&quot;:&nbsp;[&quot;D&quot;,&nbsp;&quot;B&quot;,&nbsp;&quot;D&quot;,&nbsp;&quot;C&quot;,&nbsp;&quot;C&quot;,&nbsp;&quot;A&quot;,&nbsp;&quot;C&quot;,&nbsp;&quot;D&quot;,&nbsp;&quot;A&quot;,&nbsp;&quot;B&quot;,&nbsp;&quot;D&quot;,&nbsp;&quot;A&quot;,&nbsp;&quot;C&quot;,&nbsp;&quot;A&quot;,&nbsp;&quot;C&quot;],&quot;tar&quot;:&nbsp;[0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;1]}df&nbsp;=&nbsp;pd.DataFrame(data)#&nbsp;按&nbsp;class&nbsp;分组,计算违约率(tar==1&nbsp;的比例)default_rates&nbsp;=&nbsp;df.groupby(&quot;class&quot;)[&quot;tar&quot;].mean()print(default_rates)3、求函数fx=e^x+x^2在何处取得最小值,精度要求:绝对误差小于1e-6,不能调用优化相关包import&nbsp;math#&nbsp;定义一阶导数&nbsp;f'(x)&nbsp;=&nbsp;e^x&nbsp;+&nbsp;2xdef&nbsp;f_prime(x):return&nbsp;math.exp(x)&nbsp;+&nbsp;2&nbsp;*&nbsp;x#&nbsp;定义二阶导数&nbsp;f''(x)&nbsp;=&nbsp;e^x&nbsp;+&nbsp;2def&nbsp;f_double_prime(x):return&nbsp;math.exp(x)&nbsp;+&nbsp;2#&nbsp;牛顿迭代法找极值点def&nbsp;newton_method(initial_x,&nbsp;epsilon=1e-6):x&nbsp;=&nbsp;initial_xwhile&nbsp;True:x_next&nbsp;=&nbsp;x&nbsp;-&nbsp;f_prime(x)&nbsp;/&nbsp;f_double_prime(x)#&nbsp;检查绝对误差是否小于精度要求if&nbsp;abs(x_next&nbsp;-&nbsp;x)&nbsp;&lt;&nbsp;epsilon:return&nbsp;x_nextx&nbsp;=&nbsp;x_next#&nbsp;初始值选择(通过观察函数趋势,选&nbsp;x=0&nbsp;附近作为初始值)initial_x&nbsp;=&nbsp;0min_x&nbsp;=&nbsp;newton_method(initial_x)min_value&nbsp;=&nbsp;math.exp(min_x)&nbsp;+&nbsp;min_x&nbsp;**&nbsp;2print(f&quot;函数&nbsp;f(x)&nbsp;=&nbsp;e^x&nbsp;+&nbsp;x^2&nbsp;在&nbsp;x&nbsp;=&nbsp;{min_x:.8f}&nbsp;处取得最小值&quot;)print(f&quot;最小值为:&nbsp;{min_value:.8f}&quot;)4、写个month_diff函数。计算两个'ym'格式的日期字符串的月份差from&nbsp;datetime&nbsp;import&nbsp;datetimedef&nbsp;month_diff(ym1,&nbsp;ym2):#&nbsp;解析日期为年和月y1,&nbsp;m1&nbsp;=&nbsp;int(ym1[:4]),&nbsp;int(ym1[4:])y2,&nbsp;m2&nbsp;=&nbsp;int(ym2[:4]),&nbsp;int(ym2[4:])#&nbsp;计算总月份差return&nbsp;(y1&nbsp;-&nbsp;y2)&nbsp;*&nbsp;12&nbsp;+&nbsp;(m1&nbsp;-&nbsp;m2)#&nbsp;验证示例print(month_diff('202001',&nbsp;'201804'))&nbsp;&nbsp;#&nbsp;输出:215、解析字符串:s='A1:1;b2:13;x5:651;D61:47'&nbsp;解析为字典格式s&nbsp;=&nbsp;'A1:1;b2:13;x5:651;D61:47'#&nbsp;先按分号&nbsp;;&nbsp;分割成多个键值对字符串items&nbsp;=&nbsp;s.split(';')result_dict&nbsp;=&nbsp;{}for&nbsp;item&nbsp;in&nbsp;items:#&nbsp;再按冒号&nbsp;:&nbsp;分割成键和值key,&nbsp;value&nbsp;=&nbsp;item.split(':')#&nbsp;将值转换为整数(根据需求,也可保留字符串)result_dict[key]&nbsp;=&nbsp;int(value)print(result_dict)
点赞 评论 收藏
分享
评论
5
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务