2017-02-22 21 views
1

Я построил структуру данных для двух сумм. В этой структуре данных я создал метод add и find.
add - Добавить номер во внутреннюю структуру данных.
find - Найти, если существует любая пара чисел, сумма которых равна значению. Например:Проблемы с суммированием двух сумм

add(1); add(3); add(5); 
find(4) // return true 
find(7) // return false 

следующий мой код, так что не так с этим кодом?
http://www.lintcode.com/en/problem/two-sum-data-structure-design/
это тест веб-сайт, в некоторых случаях не может быть принят

public class TwoSum { 
    private List<Integer> sets; 
    TwoSum() { 
     this.sets = new ArrayList<Integer>(); 
    } 
    // Add the number to an internal data structure. 
    public void add(int number) { 
     // Write your code here 
     this.sets.add(number); 
    } 

    // Find if there exists any pair of numbers which sum is equal to the value. 
    public boolean find(int value) { 
     // Write your code here 
     Collections.sort(sets); 
     for (int i = 0; i < sets.size(); i++) { 
      if (sets.get(i) > value) break; 
      for (int j = i + 1; j < sets.size(); j++) { 
       if (sets.get(i) + sets.get(j) == value) { 
        return true; 
       } 
      } 
     } 
     return false; 
    } 
} 
+1

Ваш код не работает? если да, то где и что, по-видимому, проблема. – Imprfectluck

+0

http://www.lintcode.com/ru/problem/two-sum-data-structure-design/. Это тестовый сайт. И я не могу пройти некоторые тесты. –

+0

@WBLee не ссылаются на сайт, для которого требуется логин. Если вы не можете сказать, какие тестовые случаи не проходят * в самом вопросе *, то вы, вероятно, не должны спрашивать о StackOverflow. –

ответ

1

Там, кажется, не будет ничего плохого с кодом.

Однако проблема с кодированием может потребовать более эффективного решения. (Вы проверяете каждый предмет против каждого элемента, который принимает O (N^2)).

Лучшее решение для реализации find, использует HashMap, который принимает O (N). Это объясняется более подробно here.

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