親アレイは、サブアレイの同じ要素を持っている場合は、親配列からのサブ配列の要素を検索するには?

ヴィヴェックDharek:

私は、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};

部分配列の値からインデックスを開始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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=231397&siteId=1