如果父数组具有相同子数组的元素,如何从父数组中搜索子数组的元素?

Viv*_*rek 2 java

我是Java新手。我有一个问题,我有两个数组parentArraysubArray

  • parentArray 有价值 {1,4,4,3,6}
  • subArray 有价值 {4,4,3}

因此,第二个数组或所谓的subArray值包含在所谓的第一个数组中parentArray,其索引从开始[1,2,3]。我的问题是,我们如何返回第一个元素的索引值,该元素subArray也是的一部分parentArray

int[] parentArray = new int[]{1,4,4,3,6};
int[] subArray = new int[]{4,4,3};
Run Code Online (Sandbox Code Playgroud)

由于subArray的值在parentArray的起始索引中[1],因此我希望程序返回1

我尝试比较两个数组并从两个数组返回公共元素。但是在此之前,我是一个初学者,因此我无法考虑任何逻辑。

Vim*_*i_R 6

我已经为此创建了一个方法。试试下面的代码,

public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); //This will create a temporary sub array
        if (Arrays.equals(temp, subArray)) {
            System.out.println(i);
            result = i;
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

改善答案

public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        if (parentArray[i] == subArray[0]) { // Checking if the first value matches
            int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); // This will create a temporary sub array
            if (Arrays.equals(temp, subArray)) {
                System.out.println(i);
                result = i;
            }
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将生成许多不必要的数组,至少检查第一个值是否匹配,然后生成一个子集。 (2认同)