@whatislov

Как можно найти в двумерном массиве максимальное число, которое встречается больше одного раза?

Добрый день! Нужно в матрице размером N*N(N задает пользователь) найти максимальное значение, которое встречается в этой матрице более одного раза. Представляю себе это так:
  1. Ищем максимальное число
  2. Ищем сколько раз встречается максимальное число, если больше одного раза, то выводим. Если нет, то ищем другое максимальное число.

Пример моего кода:
for(i=1; i<=n;i++) //Ищем максимальное число
{
	for(j=1; j<=n;j++)
	{
		if(max<Array[i][j]){
			max=Array[i][j];
		}
	}
}
for( i=1; i<=n;i++) //Ищем сколько раз встречается максимальное число, если больше одного раза, то выводим. Eсли нет, то ищем другое максимальное число.
{
	for(  j=1; j<=n;j++)
	{
		if(Array[i][j]==max){
			maks++;
		}
		if(maks>1){
			cout<<max;
		}
		else{
		 cout<<"-"; // то есть таких чисел нет
		}
	}
}

Проблема состоит в том, что не могу догадаться, как сделать так, чтобы если максимальное число(к примеру 19), встречается меньше одного раза(или один раз), у меня находилось следующее максимальное число(например 17) и если оно тоже не подходит, то числа ищутся дальше. Может реализовать через do while?
  • Вопрос задан
  • 2180 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Вариант школьный:

1) Ищите максимум от 0 до N-1
2) Меняете местами нулевой и найденный максимальный
3) Ищите максимум от 1 до N-1
Найденный максимум снова меняете, но теперь уже с первым элементом. Если нулевой и первый совпали - вы нашли максимум, который совпал более одного раза. Иначе - двигаетесь дальше, со второго элемента.

Вариант миддл - уеб разработчик на отдыхе:

1) Сортируете искомое
2) Ищите в отсортированном первый повтор.

Вариант для лентяев:
std::map m;
for(const auto&i:input)
{
  ++m[i];
}
for(auto i=m.rbegin();i!=map.rend();++i))
{
  if(i->second>1)
  {
      cout << i->first << endl;
      break;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@FoxOne
Кстати, не понял причём тут матрица N*N. Почему не просто некоторая последовательность? В чём прикол квадратности?
Ещё вариант в придачу двух от Бобби Шифер:
Считаем сколько раз какое число встретилось в последовательности (что-то типа map<int,int>), далее надо найти максимальный ключ со значением >2 (подсказка: map уже сортирован)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы