両方の配列にある値を探します

選択:

そこSO上の交差点については、このような質問ですが、それは私を助けていません。私は従うべき厳格なルールを持っています。オリジナルソリューション

static int solution(int[] A, int[] B) {
        int n = A.length;
        int m = B.length;

        Arrays.sort(A);
        Arrays.sort(B);

        int i = 0;
        for (int k = 0; k < n; k++) {
            if (i < m - 1 && B[i] < A[k]) i += 1;
            if (A[k] == B[i]) return A[k];
        }
        return -1;
    }

この溶液をARR1 = {6,6,6,6} ARR2 = {2,4,5,9,6}例えば正しいすべてではない状況であります

タスクはそれを動作させるためのコードの唯一の2行を追加することでしたので、6にはなりません。私はこれを追加しました

 int[] acopy = Arrays.copyOf(A, A.length);
        A = n > m ? A : B;
        B = n > m ? B : acopy;
        n = A.length;
        m = B.length;

単一行のようになりましたタスクは、6を返すこと

しかし、配列が、このとき

INT [] X1 = {0、2、7、10、23、345、56、456、767、56、6、80、6、65}。INT Y1 [] = {1、4、5、9、9、9、80、67、77}。

それは私が私が私のコードを変更する必要はありませんが、変更の一行​​を追加することができ、追加すべきかわからない今、80を返しますdoesntの。

モスタファアミン:

Mis94がここに言ったようにあなただけ低い値を持つ側のインデックスをインクリメントする必要があり、これは、この問題を解決するために私のアプローチです

static int solution(int[] A, int[] B) {
    int n = A.length;
    int m = B.length;

    Arrays.sort(A);
    Arrays.sort(B);

    int i = 0;
    for (int k = 0; k < n; k++) {
        if (i < m - 1 && B[i] < A[k]) { i += 1; k--; continue; }
        if (A[k] == B[i]) return A[k];
    }
    return -1;
}

私は、これは指示に従うことを願っています

おすすめ

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