У меня есть задача, которая состоит в создании функции в JavaScript, которая упорядочивает массив, который получает список неупорядоченных целых чисел. Функция должна возвращать упорядоченный массив целых чисел согласно следующим критериям:
- Чем больше единиц в двоичном представлении целого, тем ближе к индексу 0 должен быть элемент.
- Если два или более числа имеют одинаковое количество единиц в двоичном представлении, десятичное число
меньшее значение будет ближе к началу.
Пример:
Для записи: [1, 15, 5, 7, 3]
Возвращение должно быть: [15, 7, 3, 5, 1]
Пояснение:
Десятичный = Двоичный
- 1 = 1
- 15 = 1111
- 5 = 101
- 7 = 111
- 3 = 11
Десятичное число, двоичное представление которого содержит плюс, равно 15 (1111 в двоичном формате), поэтому оно будет идти первым в массиве (индекс = 0). Затем перейдите к 7, с тремя (111) из них в двоичном представлении.
Тогда есть 2 числа, двоичное представление которых содержит
одинаковое количество единиц, эти десятичные числа 5 (101) и 3 (11), оба с 2 единицами. В этом случае он пойдет первым (ближе к индексу = 0) к 3, поскольку его десятичное представление меньше (3 <5). </p>
Решение:
Наконец-то я нашел способ решить эту задачу:
const binaryOnes = integerArr => {
let binaryArray = integerArr.map(num => num.toString(2))
binaryArray.sort((a, b) => {
let regEx = /1/g
let A = a.match(regEx).length
let B = b.match(regEx).length
if (A < B) return 1
else if (A > B) return -1
else {
let binaryToIntegerA = parseInt(A, 2)
let binaryToIntegerB = parseInt(B, 2)
if (binaryToIntegerA < binaryToIntegerB) return -1
else return 1
}
})
return binaryArray.map(num => parseInt(num, 2))
}
binaryOnes([1,15,5,7,3]) // [ 15, 7, 3, 5, 1 ]
Пожалуйста, если кто-нибудь найдет лучший способ ее решить, я буду признателен.
Также некоторые отзывы на этот пост (это мой первый вопрос по StackOverflow)
Спасибо!