排列询问 | 青训营 X 豆包MarsCode 技术训练营

32 阅读1分钟

题目

小C拿到了一个排列,她想知道在这个排列中,元素 x 和 y 是否是相邻的。排列是一个长度为 n 的数组,其中每个数字从 11 到 n 恰好出现一次。

你的任务是判断在给定的排列中,x 和 y 是否是相邻的。

解答

我们可以根据给定的排列 a 来判断元素 xy 是否是相邻的。首先,我们需要找到 xy 在数组中的位置,然后检查它们是否相邻。

步骤:

  1. 找到 xy 的位置:在数组 a 中找到 xy 的索引位置。
  2. 检查相邻:如果 xy 的索引差的绝对值为 1,那么它们是相邻的。

代码实现:

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)
    print(solution(5, [3, 4, 5, 1, 2], 3, 2) == False)
    print(solution(6, [6, 1, 5, 2, 4, 3], 5, 2) == True)

解释:

  1. a.index(x)a.index(y):通过 index 方法获取元素 xy 在列表 a 中的索引位置。
  2. abs(index_x - index_y) == 1:判断两个元素的索引差是否为 1。如果是,说明它们是相邻的。

测试样例:

  • 输入 n = 4, a = [1, 4, 2, 3], x = 2, y = 4,输出 True,因为 2 和 4 是相邻的。
  • 输入 n = 5, a = [3, 4, 5, 1, 2], x = 3, y = 2,输出 False,因为 3 和 2 不是相邻的。
  • 输入 n = 6, a = [6, 1, 5, 2, 4, 3], x = 5, y = 2,输出 True,因为 5 和 2 是相邻的。

这样就完成了代码补充,可以正确判断元素 xy 是否相邻。