#algorithm
#алгоритм
Вопрос:
Как можно взять массив и сравнить три значения в массиве, не сравнивая значения более одного раза.
Я могу выполнить итерацию с тремя вложенными циклами, но это приведет к тому, что один и тот же внутренний блок будет вызываться три раза. Мне нужно время NlogN.
For Loop
For Loop
For Loop
add values and store if greater than max
Комментарии:
1. Глядя на строку «добавить значения и сохранить, если больше max», я задаюсь вопросом — почему бы просто не отсортировать массив и не добавить 3 наибольших значения?
2. Можете ли вы немного уточнить, чего вы пытаетесь достичь здесь? Сравнение трех значений массива? Друг с другом? Какие три значения? Что вы хотите получить в результате операции?
3. что значит «сравнить 3 значения»? вы ищете наибольшую сумму из 3 чисел? просто найдите 3 самых больших, это O (n)
4. Я просто добавил это для простоты. Я думаю, я не должен был. На самом деле происходит вызов функции, где порядок значений не имеет значения. check_for_validity(A,B, C)
5. @Matt: Совместимо!? Что это значит ?!
Ответ №1:
Я не уверен, что я правильно понял вопрос, но вы можете захотеть сделать что-то вроде этого:
for i from 1 to N {
for j from i 1 to N {
for k from j 1 to N {
if (i j k > currentMax) {
// do stuff
}
}
}
}
Комментарии:
1. Я понятия не имею, является ли это тем, чего он пытается достичь, но это определенно не удовлетворяет ограничению сложности
2. @amit: его ограничение сложности не имело для меня никакого смысла, поэтому я сосредоточился на аспекте отсутствия избыточности при сравнении каждой тройки значений.
3. @PengOne; Похоже, ваш алгоритм
O(n^3)
.4. @ypercube Да. Смотрите мой комментарий выше.