Top.Mail.Ru
Ответы

Найти самую длинную последовательность в массиве

Напишите функцию f(A), которая находит последнее в массиве A число, образующее максимально длинную серию. Если таких чисел несколько, то функция возвращает наименьшее из них. Для пустого массива функция возвращает undefined.
Пример: f([7,7,7,3,2,1,1,5,5,5]) = 5

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

function f(arr) {
let max = { num: arr[0], times: 1 };
let curr = { num: arr[0], times: 1 };

for (let i = 1; i < arr.length; i++) {
if (curr.num === arr[i]) {
curr.times++;
continue;
}

update_max();

/***/
curr.num = arr[i];
curr.times = 1;
}

update_max();

return max.num;

/***/
function update_max() {
let more_times_in_a_row = curr.times > max.times;
let same_times_smaller_num = curr.times == max.times && curr.num < max.num;

if (more_times_in_a_row || same_times_smaller_num) {
Object.assign(max, curr);
}
}
}

Аватар пользователя
Оракул

var arr = [7, 7, 7, 3, 2, 1, 1, 5, 5, 5, 8, 8, 8, 8, 8];
var arrLength = {},
pos = 0;
for (var i = 0; i < arr.length; i++)
{

pos = (arr[i] == arr[i - 1]) ? pos : i; чтобы то же число но в другом месте считалось как новая последовательность
key = [pos, arr[i]].join(',');
arrLength[key] = typeof arrLength[key] == 'undefined' ? 1 : arrLength[key] + 1;
}
alert('повторений/позиция/количество повторений (по убыванию)' +JSON.stringify(Object.entries(arrLength).sort((a, b) => b[1] - a[1]), null, ' '));