@ninetiledfox

Найти позицию элемента в массиве?

Здравствуйте, господа, помогите пожалуйста, уже какой день ломаю голову, но никак не могу сообразить как правильно написать код к данной задачке

Вводится массив целых чисел. Найти позицию второго с конца элемента, который встречается в массиве наиболее часто. Если несколько значений встречаются в массиве одинаковое кол-во раз выбрать наибольший по абсолютному значению, затем просто по значению. Если такого элемента нет (все элементы массива разные), то вернуть -1.
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
1) Найдите элемент, который встречается наиболее часто. Для этого можно для каждого элемента в массиве подсчитать, сколько раз он встречается вложенным циклом, или лучше воспользоваться каким-нибудь хешмапом для хранения счетчиков. Или отсортировать копию массива и там подсчитать количества вхождений уже очень легко.

2) Найдите второй с конца элемент. Во-первых, если самый частый встречается всего 1 раз, то ответа нет (-1 по условию). Если он встречается 2 или более раза, то пройдитесь с конца массива и считайте, сколько раз встречали элементы, равные данному. Когда досчитаете до двух - вы нашли ответ.
Ответ написан
azerphoenix
@azerphoenix Куратор тега Java
Так как это задача, то решать ее нужно вам самим, но могу подсказать примерные шаги для решения этой задачи:

Вводится массив целых чисел.

1) При помощи класса Scanner на вход получаем целые числа (int) и добавляем их в массив. Можно для удобства сперва добавлять их в List, а потом из List получить Array, так как массив при инициализации бывает фиксированного размера и придется тогда пересоздавать каждый раз массив. Легче при вводе числа из консоли добавлять их в список List<Integer>, а затем уже из списка получить массив чисел.

Найти позицию второго с конца элемента, который встречается в массиве наиболее часто.

2) Для этого сперва нужно создать Map<Integer, Integer> (Map<Число, Кол-во>)
Второй элемент из конца массива находится при помощи int numIndex = arr.length - 1, а само число можно найти через int num = arr[numIndex]
Если это число имеется в массиве более 2-х раз, то с конца массива нужно посчитать встречаемость элементов равных данному элементу. Когда дойдете до 2-х это будет вашим ответом на задачу.

Если нужно найти наиболее часто встречающийся элемент, то можете попробовать создать Map<Integer, Integer> key = число хранимое в массиве value (count) его количество (сколько раз он встречается в массиве).

Если несколько значений встречаются в массиве одинаковое кол-во раз выбрать наибольший по абсолютному значению,

3) Если value (count) из Map совпадает с другим value, то выбрать наиболшее значение key.
Т.е. допустим в Map у вас число 4 встречается 10 раз и число 5 встречается 11 раз, то выбираем число 5.

Если такого элемента нет (все элементы массива разные), то вернуть -1.

4) Если в массиве нет одинаковых чисел, то возвращаем -1

Примерно, как-то так...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽
Kotelov Санкт-Петербург
от 150 000 до 190 000 ₽
SCHNEIDER GROUP Санкт-Петербург
от 160 000 до 190 000 ₽