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

53 阅读3分钟

题目

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

代码思路

问题理解

我们需要判断在一个长度为 n 的排列数组 a 中,元素 x 和 y 是否相邻。排列数组意味着数组中的每个数字从 1 到 n 恰好出现一次。

数据结构选择

  • 数组:我们使用一个整数数组 a 来存储排列。

算法步骤

  1. 遍历数组:从数组的第一个元素开始,遍历到倒数第二个元素(因为我们要检查相邻元素)。
  2. 检查相邻元素:对于每个元素 a[i],检查它和下一个元素 a[i+1] 是否分别是 x 和 y,或者 y 和 x
  3. 返回结果:如果在遍历过程中找到相邻的 x 和 y,则返回 true;如果遍历完整个数组都没有找到,则返回 false

关键点

  1. 遍历数组

    • 使用 for 循环从 0 遍历到 n-2,因为我们只需要检查到倒数第二个元素。
    • 遍历的目的是为了检查每个元素与其相邻元素的关系。
  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)
  3. 返回结果

    • 如果在遍历过程中找到相邻的 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);
    }
}    

代码功能解释

功能解释

  1. solution 方法

    • 参数

      • int n:数组 a 的长度。
      • int[] a:包含排列的数组。
      • int x:要检查的第一个元素。
      • int y:要检查的第二个元素。
    • 功能

      • 遍历数组 a,检查相邻元素是否分别是 x 和 y,或者 y 和 x
      • 如果在遍历过程中找到相邻的 x 和 y,则返回 true
      • 如果遍历完整个数组都没有找到相邻的 x 和 y,则返回 false
  2. main 方法

    • 功能

      • 调用 solution 方法并打印结果,以验证代码的正确性。
      • 提供了三个测试用例,分别对应题目中的样例1、样例2和样例3。