伴学笔记 | 豆包MarsCode AI刷题

30 阅读2分钟

小C的排列询问

问题描述:

小C拿到了一个排列,她想知道在这个排列中,元素 xx 和 yy 是否是相邻的。排列是一个长度为 nn 的数组,其中每个数字从 11 到 nn 恰好出现一次。 你的任务是判断在给定的排列中,xx 和 yy 是否是相邻的。

在这个问题中,我们需要判断给定的两个元素 x 和 y 是否是相邻的。在给定的排列 a 中,每个元素都是唯一的,并且排列的长度是 n。我们要检查这两个元素是否相邻。

思路:

1.查找元素位置:我们需要查找元素 x 和 y 在排列 a 中的位置。

2.判断是否相邻:判断这两个元素在排列中的位置差是否为 1,即如果它们在数组中的位置是连续的,就认为它们是相邻的。

步骤:

3.在列表 a 中查找 x 和 y 的索引。

4.比较这两个索引,如果它们的差值为 1,则说明 x 和 y 是相邻的。

5.返回 True 或 False。

代码实现:

def solution(n: int, a: list, x: int, y: int) -> bool:

    # 获取 x 和 y 的位置

    index_x = a.index(x)

    index_y = a.index(y)

 

    # 判断它们是否相邻

    return abs(index_x - index_y) == 1

 

if name == 'main':

    # 测试用例

    print(solution(4, [1, 4, 2, 3], 2, 4) == True)  # 输出 True

    print(solution(5, [3, 4, 5, 1, 2], 3, 2) == False)  # 输出 False

    print(solution(6, [6, 1, 5, 2, 4, 3], 5, 2) == True)  # 输出 True

 

代码解析:

6.a.index(x):这个方法返回 x 在列表 a 中的索引。我们用它来获取 x 和 y 在排列中的位置。

7.abs(index_x - index_y) == 1:检查两个元素的索引差是否为 1。如果是,表示它们是相邻的。

8.返回值:如果它们是相邻的,返回 True;否则返回 False。

 

时间复杂度分析:

9.a.index(x) 和 a.index(y) 都是 O(n) 的操作,因为它们需要遍历整个列表来查找元素。

10.所以整个算法的时间复杂度是 O(n)。

 

测试用例:  

11.输入: n = 4, a = [1, 4, 2, 3], x = 2, y = 4

12.输出: True,因为 2 和 4 是相邻的,分别位于索引 2 和 1。

13.输入: n = 5, a = [3, 4, 5, 1, 2], x = 3, y = 2

14.输出: False,因为 3 和 2 不相邻,它们分别位于索引 0 和 4。

15.输入: n = 6, a = [6, 1, 5, 2, 4, 3], x = 5, y = 2

16.输出: True,因为 5 和 2 是相邻的,分别位于索引 2 和 3。

通过这种方法,我们可以有效地判断两个元素是否在给定的排列中是相邻的。