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

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

  

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

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

  

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

 Так как это задача, то решать ее нужно вам самим, но могу подсказать примерные шаги для решения этой задачи:  

  

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

  

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  

  

Примерно, как-то так...