Задать вопрос
@Kipsi

Почему не работает решение задачи?

Здравствуйте. Решаю задачу на https://prog(цензура не пропускает)hub.ru/exercises/common-number Где нужно принять массив и вернуть самое частое число в нем. Я написала функцию, конечно не идеальную, но вроде работает, но на сайте 1 кейс не проходит. В чем у меня может быть ошибка?
let arr = [1, 3, 2, 23, 3, 0, 4, 2, 23, 53, 11, 4, 23]
function Common(arr) {
  let arrSort = arr.sort((a,b)=> a < b ? -1 : 1)
  let number;
  let numberNext = 1;
  let i = 0;
  while(i < arrSort.length-1) {
    if(arrSort[i] === arrSort[numberNext]){
      number = arrSort[numberNext]
      i++
    } else {
      numberNext+=1
      i++
    }
  }
  return number
}
  • Вопрос задан
  • 217 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
WblCHA
@WblCHA
Интересный алгоритм, но реализация хромает.
const arr = [1, 2, 23, 23, 23, 0, 4, 2, 11, 4, 3, 3, 3, 3, 23, 23]

Вот кейс, который ломает работу алгоритма. Если максимальное число в массиве имеет больше всего повторений, а ранее в массиве встречалось число с на 1 меньшим количеством повторений, то усё.
Причина в этом:
while(i < arrSort.length-1)
Почему ты решила, что выходить из цикла на предпоследнем элементе хорошая идея, мне решительно непонятно.

Помимо этого есть ещё ряд проблем, которые влияют лишь на качество кода:

let arrSort = arr.sort((a,b)=> a < b ? -1 : 1)

Во-первых, сорт работает на месте. Во-вторых, что это за извращение в калбеке?
arr.sort((a, b) => a - b)

let numberNext = 1;
let i = 0;

С чего вдруг первое равно единице, а второе нулю? При первой же паре значений numberNext окажется меньше i, он банально не на каждой итерации увеличивает своё значение, в отличии от i.

while(i < arrSort.length)

По какой причине тут используется вайл, когда тут всё для фора заточено?
;
    let numberNext = 0;
    let number = arr[0];

    for(let i = 1; i < arr.length; i++) {
      if(arr[i] === arr[numberNext]) {
        number = arr[numberNext];
        continue;
      }
      numberNext++;
    }


numberNext+=1
i++

Ты уже определись какой вариант ты будешь использовать.

И последнее, аллергия на ;?)
Ответ написан
Simply1993
@Simply1993
Frontend developer
Вы можете написать какой кейс не проходит или там не показывает на каких данных проверяется?

Плюс к этому непонятно какой ответ выводить, если у нескольких чисел будет одинаковое количество повторений. У Вас есть вот такие недостатки, например:
  • в случае [11] - у вас выдаётся undefined
  • в случае [4, 11, 23] - у вас выдаётся undefined
  • в случае [4, 4, 11, 11, 23, 23] - будет равно 11
  • в случае [11, 11, 4, 4] - будет равно 4


Скорее всего, для начала, Вам нужно сделать проверка на пустой массив и на массив с одним значением.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 11:57
500 руб./в час
18 дек. 2024, в 11:54
2000 руб./за проект