题目
小C拿到了一个排列,她想知道在这个排列中,元素 x 和 y 是否是相邻的。排列是一个长度为 n 的数组,其中每个数字从 1 到 n 恰好出现一次。 你的任务是判断在给定的排列中,x 和 y 是否是相邻的。
代码思路
问题理解
我们需要判断在一个长度为 n 的排列数组 a 中,元素 x 和 y 是否相邻。排列数组意味着数组中的每个数字从 1 到 n 恰好出现一次。
数据结构选择
- 数组:我们使用一个整数数组
a来存储排列。
算法步骤
- 遍历数组:从数组的第一个元素开始,遍历到倒数第二个元素(因为我们要检查相邻元素)。
- 检查相邻元素:对于每个元素
a[i],检查它和下一个元素a[i+1]是否分别是x和y,或者y和x。 - 返回结果:如果在遍历过程中找到相邻的
x和y,则返回true;如果遍历完整个数组都没有找到,则返回false。
关键点
-
遍历数组:
- 使用
for循环从0遍历到n-2,因为我们只需要检查到倒数第二个元素。 - 遍历的目的是为了检查每个元素与其相邻元素的关系。
- 使用
-
检查相邻元素:
- 在循环中,使用
if语句检查当前元素a[i]和下一个元素a[i+1]是否分别是x和y,或者y和x。 - 具体条件是
(a[i] == x && a[i + 1] == y) || (a[i] == y && a[i + 1] == x)。
- 在循环中,使用
-
返回结果:
- 如果在遍历过程中找到相邻的
x和y,则立即返回true。 - 如果遍历完整个数组都没有找到相邻的
x和y,则返回false。
- 如果在遍历过程中找到相邻的
代码
public class Main {
public static boolean solution(int n, int[] a, int x, int y) {
// 遍历数组,检查相邻元素
for (int i = 0; i < n - 1; i++) {
// 检查 a[i] 和 a[i+1] 是否分别是 x 和 y,或者 y 和 x
if ((a[i] == x && a[i + 1] == y) || (a[i] == y && a[i + 1] == x)) {
return true;
}
}
// 如果没有找到相邻的 x 和 y,返回 false
return false;
}
public static void main(String[] args) {
System.out.println(solution(4, new int[]{1, 4, 2, 3}, 2, 4) == true);
System.out.println(solution(5, new int[]{3, 4, 5, 1, 2}, 3, 2) == false);
System.out.println(solution(6, new int[]{6, 1, 5, 2, 4, 3}, 5, 2) == true);
}
}
代码功能解释
功能解释
-
solution方法:-
参数:
int n:数组a的长度。int[] a:包含排列的数组。int x:要检查的第一个元素。int y:要检查的第二个元素。
-
功能:
- 遍历数组
a,检查相邻元素是否分别是x和y,或者y和x。 - 如果在遍历过程中找到相邻的
x和y,则返回true。 - 如果遍历完整个数组都没有找到相邻的
x和y,则返回false。
- 遍历数组
-
-
main方法:-
功能:
- 调用
solution方法并打印结果,以验证代码的正确性。 - 提供了三个测试用例,分别对应题目中的样例1、样例2和样例3。
- 调用
-