我是Java新手。我有一个问题,我有两个数组parentArray
和subArray
:
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};
由于subArray的值位于[1]
的parentArray起始索引中,因此我希望程序返回1
。
我尝试比较两个数组并从两个数组返回公共元素。但是在此之前,我是一个初学者,因此我无法想到任何逻辑。
答案 0 :(得分: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;
}
改进的答案
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;
}
答案 1 :(得分:3)
您可以按如下方式使用Collections.indexOfSubList()
:
List<Integer> parentArray = Arrays.asList(1,4,4,3,6);
List<Integer> subArray = Arrays.asList(4,4,3);
int index = Collections.indexOfSubList(parentArray , subArray);
// index is 1
如果要实现数组,请从中检出源代码并进行一些修改:
public static int indexOfSubList(int[] source, int[] target) {
int sourceSize = source.length;
int targetSize = target.length;
int maxCandidate = sourceSize - targetSize;
nextCand:
for (int candidate = 0; candidate <= maxCandidate; candidate++) {
for (int i=0, j=candidate; i<targetSize; i++, j++)
if (!(target[i] == source[j]))
continue nextCand; // Element mismatch, try next cand
return candidate; // All elements of candidate matched target
}
return -1; // No candidate matched the target
}
用法:
int[] parentArray = new int[]{1,1,1,4,4,3,6};
int[] subArray = new int[]{4,4,3};
int index = indexOfSubList(parentArray, subArray);
// index is 3
System.out.println(index);
答案 2 :(得分:1)
如果您的数组仅包含小于10的整数,您也可以尝试这样的方式。
public static void main(String[] args) {
int[] parentArray = new int[]{1, 4, 4, 3, 6};
int[] subArray = new int[]{4, 4, 3};
String s1 = convertToString(parentArray);
String s2 = convertToString(subArray);
System.out.print(s1.indexOf(s2));
}
private static String convertToString(int[] array) {
StringBuilder stringBuilder = new StringBuilder();
for(int num : array){
stringBuilder.append(num);
}
return stringBuilder.toString();
}