Home 哔哩哔哩 2025 届暑期实习在线笔试-0428
Post
Cancel

哔哩哔哩 2025 届暑期实习在线笔试-0428

2024 年 4 月 28 日 19:00 - 20:30,哔哩哔哩 2025 届工程研发笔试 Java 卷。

总限时 90 分钟,共 100 分。

image-20240428202642958

前面是 25 道单选题,每题两分,共 50 分。包括 408、数据库、Linux、Java、JVM 等等。

最后是两道算法题,分值分别为 20/30 分。

编程题使用 ACM 模式,即需要自己处理输入输出。语言不限,可以用本地 IDE。

Note: 试题回忆 / OCR 可能有错漏,且我的思路及解法较为笨拙,不敢保证正确性。

抛砖引玉,敬请指正。

算法题

Q1 连续段个数

青牛小学一年一度的六一儿童节开始了。

现在牛牛们围成一圈坐在草地上,为了方便,我们把牛牛们编号为牛1,牛2,牛3,牛n。其中牛1与牛2相邻,牛2与牛3相邻,牛n与牛1相邻

为了更好的安排接下来的活动,牛老师很好奇:从这些牛中选出几只相邻的牛,总共有多少种不同的方案

我们认为两个方案不同,当且仅当两种选法选出的牛个数不同 或 选出的牛的编号不完全相同

输入描述

输入一个整数n,表示牛的个数

输出描述

输出一个整数n,表示方案数

补充说明

对于100%的数据,保证 n ≥ 1

对于10%的数据,保证 n ≤ 5

对于30%的数据,保证n ≤ 100

对于60%的数据,保证n ≤ 1000

对于100%的数据,保证 n ≤ 10^9

示例 1

输入

1
2

输出

1
3

说明

1
2
环为1,2
可以选择(1},{2},{1,2}

示例 2

输入

1
4

输出

1
13

说明

1
2
3
4
5
6
7
环为1,2,3,4
可以选择
{1}, {2}, {3}, {4},
{1, 2}, {2, 3}, {3,4}, {4, 1},
{1, 2, 3}, {2, 3, 4}, {3, 4, 1}, {4, 1, 2}
{1, 2, 3, 4}
共13种情况

My Solution

数学题,很简单的找规律

1
2
n = int(input())
print(n * (n - 1) + 1)

Correct Solution

1
# The Same

Q2 反转字符串

给出一个长度为 n 的字符串 s 和一个整数 k ,现在请你依次按照 i = 1, 2, ... , n - k + 1 的顺序求出以下操作得到的字符串:

将字符串 s 的第 i 个字符至第 i + k - 1 之间的所有字符翻转。

求出最终状态的字符串。

例如:n 是 5,k 是 3,s 是”hello”。

i=1时,翻转[1,3] 之间的字符,得到 “lehlo”。

i= 2时,翻转[2,4]之间的字符,得到 “lIheo”。

i= 3时,翻转[3,5]之间的字符,得到 “lloeh”。

因此,最终的s为”lloeh”。

输入描述

输入包含两行。

第一行输入正整数 n ,k。

第二行输入仅由小写字母构成的字符串 s 。

2 ≤ k ≤ n ≤ 2 × 10^5

输出描述

输出 s 经过翻转后的最终状态。

示例 1

输入

1
2
5 3
hello

输出

1
lloeh

示例 2

输入

1
2
8 5
nowcoder

输出

1
odernowc

My Solution

部分超时,通过 60%。

同样是找规律,n 为奇偶数分开讨论。n为奇数时的规律我还没找全,暴力超时了一部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 部分超时,通过 60%
from typing import List

n, k = map(int, input().split())
s = input().strip()
s_lst = list(s)


def turn_over(s: List[str], left: int, right: int) -> None:
    while left < right:
        s[left], s[right] = s[right], s[left]
        left += 1
        right -= 1


if n % 2 == 0:
    print(s[k - 1:] + s[:k - 1])
else:
    pre = s[k - 1:]  # 后面 n-k+1 个移到最前面
    # 但是前面的我还没找到啥明显规律,不知道该咋写
    for i in range(n - k + 1):
        turn_over(s_lst, i, i + k - 1)
    print(''.join(s_lst))

Correct Solution

1
# TODO
This post is licensed under CC BY 4.0 by the author.

阿里云2025届暑期实习在线笔试-0428

阿里国际数字商业集团春季2025届校园招聘在线笔试-工程-0429