青训营X豆包MarsCode 技术训练营第五课 | 豆包MarsCode AI 刷题

67 阅读2分钟

一、计算从位置x到y的最少步数

问题描述

小F正在进行一个 AB 实验,需要从整数位置 x 移动到整数位置 y。每一步可以将当前位置增加或减少,且每步的增加或减少的值必须是连续的整数(即每步的移动范围是上一步的 -1+0 或 +1)。首末两步的步长必须是 1。求从 x 到 y 的最少步数。

输入描述

输入包含两个整数 x 和 y,表示起始位置和目标位置。

输出描述

输出从 x 到 y 所需的最小步数。


测试样例

样例1:

输入:x_position = 12, y_position = 6
输出:4

样例2:

输入:x_position = 34, y_position = 45
输出:6

样例3:

输入:x_position = 50, y_position = 30
输出:8

样例4:

输入:x_position = 0, y_position = 0
输出:0

解题思路:

✳从x到y的距离为s :=abs(x-y)

✳由于每次的步数只能是上次基础上的+1、-1或0。所以,步数的过程由三部分组成:

1)1~n项的和:n*(n+1)/2

2)前1~n-1项的和:n*(n-1)/2

3)i个n

4)0个或1个1~n之间的数x

✳整理公式为:

n^2 = s - i*n - x

ans = 2*n-1+i+(0|1)

代码实现:

image.png

输入样例:

image.png

输出样例:

image.png

二、字符串最短循环子串

小M在研究字符串时发现了一个有趣的现象:某些字符串是由一个较短的子串反复拼接而成的。如果能够找到这个最短的子串,便可以很好地还原字符串的结构。你的任务是给定一个字符串,判断它是否是由某个子串反复拼接而成的。如果是,输出该最短的子串;否则,输出空字符串""

例如:当输入字符串为 abababab 时,它可以由子串 ab 反复拼接而成,因此输出 ab;而如果输入 ab,则该字符串不能通过子串的重复拼接得到,因此输出空字符串。


测试样例

样例1:

输入:inp = "abcabcabcabc"
输出:'abc'

样例2:

输入:inp = "aaa"
输出:'a'

样例3:

输入:inp = "abababab"
输出:'ab'

样例4:

输入:inp = "ab"
输出:''

样例5:

输入:inp = "abcdabcdabcdabcd"
输出:'abcd'

样例6:

输入:inp = "b"
输出:''

数据范围:

测试数据集

解题思路:

题目简单清晰,直接暴力for循环。

外层循环遍历模板串,若原len(inp)%len(s) != 0则跳过此串。

内层循环遍历原串,对模板进行匹配,若匹配失败则退出循环,考虑下一个模板串。

代码实现:

image.png