Оптимизация алгоритма Поиск числа максимально повторяющегося в массиве

Решил потестировать оба варианта. И заметил в своем варианте такую “фичу”. Индекс выбирается непонятно как. Допустим если в массиве будет более одной группы с одинаковым вхождением ( ну т.е. число 555 было три раза, число 553 - три раза ну и еще какое ни будь тоже три раза) И вот по какому принципу он выбирает indRep?

Вот несколько выборок результата, стрелочкой указал выбранный indRep:
что-то как-то вставился текст непонятно… возможно из-за многотире

Спойлер

5118228
[218, 217, 218, 216, 217, 217, 215, 215, 217, 216, 214, 218, 218, 216, 214, 215, ]
[218, 217, 216, 215, 214, ]
218 = 4
217 = 4 <
216 = 3
215 = 3
214 = 2
indRep: 1
Num: 217
maxRep: 4
19256


5731732
[110, 110, 106, 109, 107, 106, 109, 106, 107, 108, 110, 110, 107, 108, 109, 106, ]
[110, 106, 109, 107, 108, ]
110 = 4 <
106 = 4
109 = 3
107 = 3
108 = 2
indRep: 0
Num: 110
maxRep: 4
13576


4909336
[216, 218, 215, 217, 214, 216, 215, 214, 214, 216, 216, 218, 214, 218, 218, 215, ]
[216, 218, 215, 217, 214, ]
216 = 4 <
218 = 4
215 = 3
217 = 1
214 = 4
indRep: 0
Num: 216
maxRep: 4
19256


1783060
[216, 218, 216, 217, 217, 216, 218, 215, 214, 217, 218, 216, 216, 217, 217, 214, ]
[216, 218, 217, 215, 214, ]
216 = 5 <
218 = 3
217 = 5
215 = 1
214 = 2
indRep: 0
Num: 216
maxRep: 5
19256


13052308
[107, 109, 106, 108, 107, 106, 109, 108, 109, 107, 110, 106, 110, 106, 107, 108, ]
[107, 109, 106, 108, 110, ]
107 = 4
109 = 3
106 = 4 <
108 = 3
110 = 2
indRep: 2
Num: 106
maxRep: 4
13668


17458540
[218, 214, 218, 217, 215, 216, 217, 216, 216, 218, 214, 215, 216, 218, 217, 215, ]
[218, 214, 217, 215, 216, ]
218 = 4
214 = 2
217 = 3
215 = 3
216 = 4 <
indRep: 4
Num: 216
maxRep: 4
19344


14531948
[214, 215, 218, 218, 214, 215, 215, 214, 218, 216, 217, 214, 218, 216, 217, 215, ]
[214, 215, 218, 216, 217, ]
214 = 4 <
215 = 4
218 = 4
216 = 2
217 = 2
indRep: 0
Num: 214
maxRep: 4
19348


13472148
[110, 109, 106, 107, 108, 109, 107, 108, 106, 108, 107, 110, 106, 110, 109, 107, ]
[110, 109, 106, 107, 108, ]
110 = 3
109 = 3
106 = 3
107 = 4 <
108 = 3
indRep: 3
Num: 107
maxRep: 4
13664


2591124
[108, 110, 107, 108, 110, 106, 108, 109, 106, 106, 109, 107, 110, 110, 109, 107, ]
[108, 110, 107, 106, 109, ]
108 = 3
110 = 4 <
107 = 3
106 = 3
109 = 3
indRep: 1
Num: 110
maxRep: 4
13576

Вот код:

Спойлер
void FilterRaw(byte _sens) {
  uint16_t FilterArr[NUMREADSENS];
  byte     RepArr[NUMREADSENS];
  unsigned long time = micros();
  Serial.println("---------------");
  Serial.println(time);
  for (byte n = 0; n < NUMREADSENS; n++) {
    FilterArr[n] = 0; RepArr[n] = 0;
  }
  byte maxRep = 0, indRep = 0;
  for (byte n = 0; n < NUMREADSENS; n++) {
    for (byte k = 0; k < NUMREADSENS; k++) {
      if (FilterArr[k] == 0) {
        FilterArr[k] = Sens[_sens].Raws[n];
        ++RepArr[k];
        if (RepArr[k] > maxRep) {
          indRep = k;
          maxRep = RepArr[k];
        }
        break;
      }
      if (FilterArr[k] == Sens[_sens].Raws[n]) {
        ++RepArr[k];
        if (RepArr[k] > maxRep) {
          indRep = k;
          maxRep = RepArr[k];
        }
        break;
      }
    }
  }

И вот целиком
https://wokwi.com/projects/369782894463951873
Там ползунки нужно сразу сдвинуть куда ни будь в середину

Почему выбирается то первый из одинаковых, то последний… но вроде было и в серединке (но могу ошибаться)?
С Линейным вариантом, предложенным Евгением, пробовал. Но там столкнулся с тем, что когда разница между мин и макс большая, то начинаются “проблемы”. Но я решение нашел, но пока застопорился на своем же варианте(

По какому?
Смотрите код.
На самом деле можно добиться, чтобы индекс был заведомо первым либо последним из встреченных.

Да вот сам его(код) придумал, а почему так происходит - не разберусь… Есть подозрения, что indRep запоминается в разных условиях, поэтому так и происходит. Так-то выбирает в любом случае максимальное вхождение числа. Пусть даже таких групп более одной, но в реале я думаю таких ситуаций не будет. В любом случае буду проверять maxRep и если недостаточно будет вхождений числа то применять арифметическое среднее.

Это да. Просто отдельно пробежаться по временным массивам и сделать выборку ту которую нужно.

Но в моем случае я хочу понять не приведет ли данная фича к более серьезным последствиям. Пока не вижу ничего критичного но и понять не могу почему так происходит)

Во:

[469, 473, 469, 473, 471, 470, 471, 473, 472, 471, 470, 471, 469, 469, 470, 470, ]
[469, 473, 471, 470, 472, ]
469 = 4
473 = 3
471 = 4 <
470 = 4
472 = 1
indRep: 2
Num: 471
maxRep: 4