Мне был задан этот вопрос в недавнем телефонном интервью Java:
Вам предоставляется матрица NxN (0-1) со следующими свойствами:
- Каждая строка сортируется (последовательность из 0, за которой следует последовательность 1)
- Каждая строка представляет целое число без знака (путем чтения битов)
- Каждая строка уникальна.
Пример:
0 1 1
1 1 1
0 0 1
Значения бит в каждой строке сортируются, а строки представляют целые числа 3, 7 и 1.
Найдите строку, представляющую наименьшее целое число. В приведенном выше примере ответ представляет собой строку 3, которая представляет целое число 1.
Я начал с грубой силы квадратичной сложности. Ответчик ответил, что я не использую отсортированную собственность.
Подумав много, я использовал бинарный поиск в каждой строке, и он пришел к O (nlogn). Он спросил, могу ли я улучшить ситуацию. Я много думал, но не смог улучшить.
Я был бы признателен, если бы кто-нибудь мог дать какие-то указания на то, чтобы его вставить.
Другой пример:
0 1 1 1
0 0 0 1
0 0 0 0
1 1 1 1
Ответом будет строка 3, представляющая целое число 0.