原题如下
问题描述
小C拿到了一个排列,她想知道在这个排列中,元素 x 和 y 是否是相邻的。排列是一个长度为 n 的数组,其中每个数字从 1 到 n 恰好出现一次。
你的任务是判断在给定的排列中,x 和 y 是否是相邻的。
解决思路
-
遍历数组:
- 我们需要遍历整个数组,以便检查每一对相邻的元素。
- 使用一个循环从数组的第一个元素开始,直到最后一个元素(或者倒数第二个元素,因为我们每次比较的是当前元素和下一个元素)。
-
检查相邻元素:
- 在遍历过程中,我们需要检查当前元素和下一个元素是否分别是
x和y,或者y和x。 - 这意味着我们需要两次比较:一次是
a[i] == x && a[i+1] == y,另一次是a[i] == y && a[i+1] == x。
- 在遍历过程中,我们需要检查当前元素和下一个元素是否分别是
-
返回结果:
- 如果在遍历过程中找到了相邻的
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。