Оптимизированный способ удаления повторяющихся значений данного массива

1

Недавно мне задали очень сложный вопрос в интервью.

  1. Учитывая массив, подобный (например,) Изображение 174551

  2. Теперь напишите оптимизированный алгоритм (без использования в функции построения, кроме основной, как для цикла и т.д.), Чтобы выход не содержал повторяющихся значений.

Обратите внимание: конечно, мы можем сделать это, имея 2 для циклов, но не оптимизированный. Они хотели оптимизированное решение.

Теги:

7 ответов

3
Лучший ответ

В С# просто используйте метод System.Linq Distinct.

Образец

var stringArray = { "0", "1", "5", "65", "r" };
var uniqueStringArray = stringArray.Distinct().ToArray();

Больше информации

  • 0
    То же самое предложение :)
  • 1
    @dknaack: Спасибо за быстрый ответ, на самом деле они попросили написать алгоритм без использования встроенных классов / методов. Или, другими словами, как реализовать метод DISTINCT () ... :)
Показать ещё 2 комментария
1

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

  • 0
    Который в O (n log n) в целом.
0

'var stringArray = {"0", "1", "5", "65", "r"}; var uniqueStringArray = stringArray.Distinct(). ToArray();

0

В Java поместите массив в Set

см. http://docs.oracle.com/javase/7/docs/api/java/util/Set.html

0

Для С# вы можете:

var result = new HashSet<string>(yourArray);
0

В LinQ возможно

strarray = Your array.
strarray.Distinct().ToArray()
0

В java вы можете добавить все элементы в Set Collections#addAll()

Set<T> data = new HashSet<T>();
Collections.addAll(data, yourArray);

PS: Set - это коллекция, которая не содержит повторяющихся элементов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню