Member 13442096 Ответов: 3

Второе по величине целое число


Write a function that accepts an array of non-negative integers and returns the second largest integer in the array. Return -1 if there is no second largest.

int f(int[ ] a)

пример
if the input array is	return
{1, 2, 3, 4}	3
{{4, 1, 2, 3}}	3
{1, 1, 2, 2}	1
{1, 1}	-1
{1}	-1
{}	-1


Что я уже пробовал:

каков будет ответ на этот вопрос с выходом

3 Ответов

Рейтинг:
2

CPallini

У тебя есть C++, у вас есть сила стандартной библиотеки:

  • сортировка массива в порядке убывания (см. std:: сортировка[^]).
  • удалите соседние дубликаты элементов (см. std:: уникальный[^]).
  • верните 2nd элемент массива, если он существует, в противном случае возвращает -1.


Patrice T

Прибегать к "сортировке" только для того, чтобы найти второе по величине число, выглядит как большая работа для довольно простой вещи.

CPallini

Это зависит от контекста, то есть от ожидаемого размера входного массива. Для больших массивов std:: unique также был бы излишним.

«_Superman_»

Я бы не согласился.
std::sort есть чем воспользоваться.
Я считаю, что это было бы более оптимизировано, а не повторять цикл.

CPallini

Ну, нет. Итерация потребует O(N), в то время как, например, средний случай быстрой сортировки равен O (N log N).

Patrice T

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

«_Superman_»

Я согласен. В этом случае повторение одного раза по списку действительно было бы самым быстрым.

«_Superman_»

Я бы все равно предпочел sort иметь if условия внутри цикла.

Patrice T

Можно ожидать, что sort чтобы скрыть несколько ifвнутри несколько loopс.

«_Superman_»

Определенно да. Но std::sort это проверено и проверено. Кто знает, как он будет оптимизирован в будущем. Сказав это, после экспериментов, если производительность имеет огромное значение, то обязательно избавится от std::sort.

CPallini

По-моему, в этом-то все и дело. Для небольших массивов я бы определенно использовал sort и unique.

Рейтинг:
1

Patrice T

Возьмите лист бумаги и карандаш. И попробуйте, найдите механический способ решения проблемы, этот способ-алгоритм, который вы ищете.
Совет: начните с кода, который ищет наибольшее целое число.

Мы не делаем вашу домашнюю работу.
Домашнее задание предназначено не для того, чтобы проверить ваши навыки просить других людей выполнять вашу работу, а для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это все равно что пытаться научиться водить машину, обучая кого-то другого.
Создание алгоритма-это в основном поиск математики и необходимая адаптация к вашей реальной задаче.

Идея "развития" заключается в том, что это слово предполагает: "систематическое использование научно-технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".


Рейтинг:
0

«_Superman_»

Я бы предложил сортировка[^] сначала массив в порядке убывания, а затем получение значения в array[1].
Проверка того, нужно ли возвращать -1, потребует нескольких простых действий if соорудит.