ヴィヴェックDharek:
私は、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};
部分配列の値からインデックスを開始parentArrayであるとして[1]
、私は私のプログラムを返すようにしたいです1
。
私は、2つの配列を比較し、両方の配列から共通の要素を返す試みました。しかし、その前の、私は初心者ですとロジックのいずれかを考えることはできません。
タイゲテウス:
あなたが使用することができ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);