Сортировка массива по булевому значению

Здравствуйте, ребята, я надеюсь, что у вас все хорошо и вы стараетесь решать большие задачи. Но иногда на собеседованиях нам попадаются действительно сложные задачи, которые могут отнять у нас драгоценный шанс 😥. Здесь мы рассмотрим проблему сортировки массива по булевому значению без использования какого-либо метода и без создания нового массива в O(n) временной сложности.

Эта задача была встречена в интервью Amazon и я думаю, что она будет вам полезна. Итак, давайте начнем 😎 -.

Предположим, что у нас есть несортированный массив, такой как этот —

const response = [
{
id: 1,
name: 'Phone',
isChecked: false
},
{
id: 2,
name: 'Laptop',
isChecked: true
},
{
id: 3,
name: 'Desktop',
isChecked: false
},
{
id: 4,
name: 'Watch',
isChecked: true
}
];

и нам нужно поместить все проверенные элементы первыми, а непроверенные — последними. Ниже приведен код для этого.

let lastElementUnchecked;
for (let i = 0; i < response.length; i++) {
    if (response[i].isChecked && lastElementUnchecked !== undefined) {
        let current = response[i];
        response[i] = response[lastElementUnchecked];
        response[lastElementUnchecked] = current;
        i = lastElementUnchecked;
        lastElementUnchecked = undefined;
    } else {
        if (!response[i].isChecked && lastElementUnchecked === undefined) {
            lastElementUnchecked = i;
        }
    }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

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

Надеюсь, вам понравится, спасибо, что прочитали 😊.

Оцените статью
devanswers.ru
Добавить комментарий