小C的排列询问 | 豆包MarsCode AI刷题

76 阅读2分钟

原题如下

问题描述

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

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

解决思路

  1. 遍历数组

    • 我们需要遍历整个数组,以便检查每一对相邻的元素。
    • 使用一个循环从数组的第一个元素开始,直到最后一个元素(或者倒数第二个元素,因为我们每次比较的是当前元素和下一个元素)。
  2. 检查相邻元素

    • 在遍历过程中,我们需要检查当前元素和下一个元素是否分别是 x 和 y,或者 y 和 x
    • 这意味着我们需要两次比较:一次是 a[i] == x && a[i+1] == y,另一次是 a[i] == y && a[i+1] == x
  3. 返回结果

    • 如果在遍历过程中找到了相邻的 x 和 y,则返回 True
    • 如果遍历完整个数组都没有找到,则返回 False

代码如下:

`

def solution(n: int, a: list, x: int, y: int) -> bool:
    # 遍历数组,检查每一对相邻的元素
    for i in range(n - 1):
        # 检查当前元素和下一个元素是否分别是 x 和 y,或者 y 和 x
        if (a[i] == x and a[i + 1] == y) or (a[i] == y and a[i + 1] == x):
            return True
    # 如果遍历完整个数组都没有找到相邻的 x 和 y,则返回 False
    return False

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)

`

关键步骤解释:

  • for i in range(n - 1)::遍历数组 a,注意这里只需要遍历到 n-2,因为我们检查的是相邻元素。
  • if (a[i] == x and a[i + 1] == y) or (a[i] == y and a[i + 1] == x)::检查当前元素和下一个元素是否分别是 x 和 y,或者 y 和 x
  • return True:如果找到相邻的 x 和 y,则返回 True
  • return False:如果遍历完整个数组都没有找到相邻的 x 和 y,则返回 False