问题描述
小C拿到了一个排列,她想知道在这个排列中,元素 xx 和 yy 是否是相邻的。排列是一个长度为 nn 的数组,其中每个数字从 11 到 nn 恰好出现一次。
你的任务是判断在给定的排列中,xx 和 yy 是否是相邻的。
测试样例
样例1:
输入:
n = 4, a = [1, 4, 2, 3], x = 2, y = 4
输出:True
样例2:
输入:
n = 5, a = [3, 4, 5, 1, 2], x = 3, y = 2
输出:False
样例3:
输入:
n = 6, a = [6, 1, 5, 2, 4, 3], x = 5, y = 2
输出:True
题目解析
题目要求判断在一个长度为 n
的排列数组中,元素 x
和元素 y
是否是相邻的。数组 a
包含从 1 到 n
的所有整数,且每个数字恰好出现一次。因此,元素 x
和 y
都会出现在数组中,且它们的位置是唯一的。
我们需要完成以下任务:
- 找到元素
x
和元素y
在数组中的索引位置。 - 判断这两个位置是否相差 1,即是否相邻。
代码:
代码逐行解析
-
#include <iostream>
和#include <vector>
- 这两行是引入必要的头文件:
iostream
用于输入输出流,允许我们使用cout
输出结果。vector
用于动态数组类型,存储排列数组a
。
- 这两行是引入必要的头文件:
-
bool solution(int n, vector<int> a, int x, int y)
- 定义了一个名为
solution
的函数,返回类型是bool
(布尔型)。该函数接受四个参数:n
是数组的长度。a
是排列数组。x
和y
是需要判断是否相邻的元素。
- 定义了一个名为
-
int indexX = -1, indexY = -1;
- 定义两个变量
indexX
和indexY
来存储x
和y
在数组a
中的位置,初始值设为 -1,表示尚未找到。
- 定义两个变量
-
for (int i = 0; i < n; ++i)
- 使用一个
for
循环遍历数组a
,查找x
和y
的位置。
- 使用一个
-
if (a[i] == x) indexX = i;
和if (a[i] == y) indexY = i;
- 在循环中,检查当前位置是否等于
x
或y
,如果是,则分别将indexX
和indexY
设置为当前位置的索引i
。
- 在循环中,检查当前位置是否等于
-
return abs(indexX - indexY) == 1;
- 判断
x
和y
的索引差值是否为 1,即它们是否相邻。如果是,返回true
;否则返回false
。
- 判断
-
int main()
- 在
main
函数中,我们调用了solution
函数来测试不同的输入,并输出相应的布尔值。 - 使用
cout
输出true
或false
,并且使用条件表达式进行比较,确保结果符合预期。
- 在
总结
这道题的关键在于:
- 遍历数组找出
x
和y
的索引。 - 判断它们的索引是否相差 1。