2016-12-06 2 views
-1

У меня возникли проблемы с поиском алгоритма, который найдет различия между двумя целыми массивами. У меня уже есть метод сортировки, чтобы он пробежал, так что числа находятся в порядке возрастания.Найти разницу между двумя массивами int

Например:

SetX = {1, 2, 3, 4, 5}

SetY = {0, 2, 4, 6}

Возвращение должны быть номера в SetX, которые не отображаются в SetY.

так Resultset = {1, 3, 5}

Иногда я получаю правильный ответ, если я делать небольшие массивы, но если я делаю массивы, которые являются 4 или более Целые долго это дает мне неправильный возврат.

Может ли кто-нибудь просмотреть мой код и рассказать мне, что я делаю неправильно?

public static int firstFruit(int[] setX, int usedSizeSetX, int[] setY, int usedSizeSet2, int[] resultSet) { 
    int a = 0, b = 0, c = 0; 

    while(a < usedSizeSetX && b < usedSizeSetY){ 
     if(setX[a] == setY[b]) { 
      a++; 
     } else if(setX[a] == setY[b]){ 
      b++; 
     } else { 
      resultSet[c++] = setX[a++]; 
      b++; 
     } 
    } 
    return c; 
} 
+0

Можете ли вы привести несколько примеров ввода, где он дает неправильный ответ? – BretC

+5

ваши первые две проверки в точности совпадают. Вы никогда не столкнетесь со вторым условным ... – jgitter

+0

[Здесь] (https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html) есть список всех методы, предлагаемые классом ** Array **. Для каждого элемента в одном массиве вы можете использовать binsearch, чтобы найти, появляется ли он в другом массиве. –

ответ

1

Я думаю, что ваши условные обозначения немного FUBAR. Обработка должна быть:

  1. Если Setx [а]> сеты [б] -> б ++
  2. Если Setx [а] < сеты [б] -> а ++
  3. Else -> добавить Setx [а ] к результату, a ++, b ++
+0

Это работает отлично! Спасибо. – Pableto

+0

Что еще более важно, вы понимаете, почему это работает? – jgitter

+0

Не могли бы вы объяснить это с точки зрения непрофессионала. Я думаю, что несколько счетчиков меня смущают. – Pableto

Смежные вопросы