javascript - Как я могу вернуть только количество парных значений в массиве?




(3)

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

Благодаря вам, я понимаю, что я должен увеличить i в конце, чтобы предотвратить повторное сравнение.

function pairNumbers(arr) {
const sorted_arr = arr.sort();
const results = [];
for (let i = 0; i < sorted_arr.length; i++) {
if (sorted_arr[i] == sorted_arr[i + 1]) {
results.push(sorted_arr[i]);
i = i + 1; 
}

}
return results.length;
}
console.log(pairNumbers([10, 10, 10, 10, 20, 20, 20, 30, 50])) // 3

Я хочу отобразить количество парных значений в массиве. Например, у меня есть этот массив:

[10,10,10,10,20,20,20,30,50]

Я хотел бы отобразить 3 потому что у нас есть 3 пары чисел. Как я могу это сделать?

function pairNumber(arr) {
  var sorted_arr = arr.sort();
  var i;
  var results = [];
  for (i = 0; i < sorted_arr.length; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i]) {
      results.push(sorted_arr[i]);
    }

  }
  return results.length;
}
console.log(pairNumber([10, 10, 10, 10, 20, 20, 20, 30, 50]))


Вот еще один подход с использованием Set :

function pairNumbers(arr) {
  let count = 0;
  const set = new Set();

  for (let i = 0; i < arr.length; i++) {
    if (set.has(arr[i])) {
      count++;
      set.delete(arr[i])
    } else {
      set.add(arr[i])
    }
  }

  return count;
}
console.log(pairNumbers([10, 10, 10, 10, 20, 20, 20, 30, 50])) // 3


Я бы уменьшил в объект, подсчитав количество вхождений каждого числа. Затем снова уменьшите значения Object.values объекта, чтобы подсчитать количество пар, добавив Math.floor(count / 2) к аккумулятору на каждой итерации:

function pairNumber(arr) {
  const itemCounts = arr.reduce((a, item) => {
    a[item] = (a[item] || 0) + 1;
    return a;
  }, {});
  return Object.values(itemCounts)
    .reduce((pairsSoFar, count) => pairsSoFar + Math.floor(count / 2), 0);
}
console.log(pairNumber([10, 10, 10, 10, 20, 20, 20, 30, 50]))

Вероятно, лучше избегать .sort если это возможно, что увеличивает вычислительную сложность с O(n) (минимум) до O(n log n) .







javascript