Array имеет 101 значение. Этот массив содержит числа от 1 до 100 и одно число повторяется (два раза). Напишите код psuedo, чтобы найти повторяющийся номер.psuedo код, чтобы найти повторяющийся номер?
ответ
- Можно хэш значения и обнаружение столкновений
- Вы можете отсортировать массив, то петля этого нахождение дубликатов
- Вы можете искать массив (длинный и медленно!)
Если вы хотите быть умным, взгляните на хеширование. Если вы хотите играть в нее легко и безопасно, сортировка списка с помощью сортировки слиянием, то, пожалуй, лучше всего зацикливать индексы.
Сортировка массива будет O (N log N), и это если вы выберете подходящий алгоритм сортировки. Линейный поиск с массивом «видимых» флагов будет быстрее (O (N), а операции тривиальны). Эта последняя часть является ключевой, хотя - сравнение каждой записи со всеми остальными действительно «длинное и медленное», поэтому не делайте этого, если нет ответа O (1) на вопрос «видел ли я это число раньше?» , – cHao
Как у вас есть «видимый» флаг? Это проблема! –
Было бы тривиально на языках, которые предоставляют наборы или словари. Перемещайте массив и добавьте число в набор, если он еще не существует. Если это так, у вас есть дубликат. –
Я бы добавил все индексы [0] -> [100], чтобы узнать, что 1 + 2 + 3 ... + 100 должно равняться вычитанию из вашего результата, и вы получили повторяющийся номер.
Таким образом, вы бы просто иметь простой
for
или while
цикл, проходящий через каждый индекс затем вычесть 2 и у вас есть результат.
Что-то вроде ...
q = 0;
p = 101 * 50;
for(i<=100; i <array.length; i++){
q += q + array[i]
}
repeating number = q-p;
Умный :) (и некоторый обязательный шум для достижения «достаточно» символов) – sarnold
Вам не нужно добавлять все числа от 1 до 100, чтобы узнать общее количество. Это просто 101 * 50 = 5050. – Guffa
Для справки простой способ рассчитать 1 + 2 + 3 + ... + 100 будет '(1 + 100) * 100/2'. Работает для любых двух чисел; просто замените '1' на низкое число и' 100' на высокий. – cHao
Попробуйте это (C#):
int[] array = ... ; // initialize appropriately
var hashSet = new HashSet<int>();
var indexOfDuplicate = -1;
for (var i = 0; i < array.Length; i++) {
if (hashSet.Contains(array[i])) {
indexOfDuplicate = i;
break;
}
hashSet.Add(array[i]);
}
var duplicateNumber = array[indexOfDuplicate];
С помощью этого решения вы будете иметь как индекс дубликата числа (второе вхождение) и дубликата числа ,
Комплект поставки;
для каждого p в массиве { set.add (p); }
печать (комплект);
- 1. код, чтобы найти номер IMEI
- 2. Почему я должен суммировать, чтобы найти повторяющийся номер?
- 3. Функция WordPress - исправить, чтобы остановить повторяющийся код
- 4. Номер порта, повторяющийся дважды?
- 5. Повторяющийся код
- 6. Найти повторяющийся элемент в массиве
- 7. Код VBA, чтобы найти номер строки даты в данных
- 8. Рефактор повторяющийся код jQuery
- 9. Удалить повторяющийся код
- 10. Найти повторяющийся шаблон, который имеет повторяющийся шаблон
- 11. Код, повторяющийся при наследовании
- 12. Сократить повторяющийся код
- 13. Минимальный/Оптимизирующий повторяющийся код
- 14. Повторяющийся код в jQuery
- 15. merge jquery повторяющийся код
- 16. Как устранить повторяющийся код
- 17. Повторяющийся код конденсации
- 18. Повторяющийся код в Meteor
- 19. mvc3 actionresult код, повторяющийся
- 20. Повторяющийся код в UITableView
- 21. Повторяющийся код C#
- 22. чистый повторяющийся код javascript
- 23. Повторяющийся код раз
- 24. Solr: Как работает AND (код Psuedo)
- 25. Код Psuedo для печати 6,7 бесконечно
- 26. Project Euler # 4 повторяющийся номер чисел
- 27. Как найти повторяющийся элемент в массиве и вернуть повторяющийся индекс
- 28. Конструирование, повторяющийся код - нужен совет
- 29. Как удалить определенный повторяющийся номер в списке?
- 30. Повторяющийся код find replace incrementally
Что это? Домашнее задание? Вызов? Спам? –
Согласитесь, это почти похоже на вырезание и вставку из задания! –