Для заданного массива arr [] размера n> 4 задача состоит в том, чтобы проверить, можно ли упорядочить данный массив в виде левого или правого массива?
Левый или правый позиционированный массив означает, что каждый элемент в массиве равен количеству элементов слева или количеству элементов справа.
Примеры :
Input : arr[] = {1, 3, 3, 2} Output : "YES" This array has one such arrangement {3, 1, 2, 3}. In this arrangement, first element '3' indicates that three numbers are after it, the 2nd element '1' indicates that one number is before it, the 3rd element '2' indicates that two elements are before it. Input : arr[] = {1, 6, 5, 4, 3, 2, 1} Output: "NO" // No such arrangement is possible Input : arr[] = {2, 0, 1, 3} Output: "YES" // Possible arrangement is {0, 1, 2, 3} Input : arr[] = {2, 1, 5, 2, 1, 5} Output: "YES" // Possible arrangement is {5, 1, 2, 2, 1, 5}
Простое решение состоит в том, чтобы сгенерировать все возможные схемы размещения (см. Эту статью) и проверить условие расположения массива влево или вправо, если каждый элемент в массиве удовлетворяет условию, то «YES» или «NO». Временная сложность для этого подхода составляет O (n * n! + N), n * n! сгенерировать все договоренности и n для проверки состояния с использованием временного массива.
Эффективное решение этой проблемы требует небольшого наблюдения и бумажной работы. Чтобы удовлетворить условию левого или правого позиционированного массива, все числа в массиве должны быть равны index, i или (n-1-i) и arr [i] <n. Таким образом, мы создаем массив посещенных [] размером n и инициализируем его элемент с 0. Затем мы пересекаем массив и выполняем следующие шаги:
- Если он посещен [arr [i]] = 0, тогда задайте 1, что проверяет условие, что количество элементов в левой части массива arr [0]… arr [i-1] равно arr [i].
- Иначе make make [n-arr [i] -1] = 1, которая проверяет условие, что число элементов в правой части массива arr [i + 1]… arr [n-1] равно arr [i ].
- Теперь переходим в массив посещенных [], и если все элементы массива посещенных [] становятся равными 1, это означает, что расположение возможно «ДА», иначе «НЕТ».
|
Джава
|
python3
|
C #
|
PHP
|
Выход :
"YES"
Сложность времени: O (n)
Вспомогательное пространство: O (n)
Эта статья предоставлена Шашанком Мишрой (Гуллу) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Проверьте, можно ли расположить элементы массива, удовлетворяющие заданному условию
- Проверьте, можно ли расположить элементы массива в круг с последовательной разницей в 1
- Увеличить нечетные элементы на 1 и уменьшить четные элементы на 1 в массиве
- Найти элемент в массиве так, чтобы сумма левого массива была равна сумме правого массива
- Переставить массив так, чтобы четные позиции были больше нечетных
- Проверьте, можно ли увеличивать или уменьшать массив, вращая массив
- Проверьте, существуют ли два элемента в массиве, сумма которых равна сумме остатка массива
- Вращение массива влево с использованием векторов в C ++
- Запросы на левый и правый круговой сдвиг в массиве
- Вывести левый поворот массива за время O (n) и пространство O (1)
- Найти индекс левого указателя после возможных перемещений в массиве
- Минимальный элемент, оставшийся от массива после выполнения заданных операций
- Ближайшее большее или одинаковое значение слева для каждого элемента в массиве
- Быстро найти несколько левых вращений массива | Комплект 1
- Найти ближайшие меньшие числа на левой стороне в массиве
0.00 (0%) 0 votes