Мне было поручено решить загадку следующим образом: Запрограммировать синтаксический анализатор ввода (в C, Python, Java или Go), который читает файл со стандартного ввода и считывает данные в байтовый массив (8-битные байты).).проверяет, имеет ли строка уникальный набор байтовых значений.Если это так, он должен отслеживать номер строки. Наконец, он должен распечатать номера строк, которые имеют уникальный набор байтовых значений в каждой строке.
-Программа должна работать эффективно и в течение времени -оно не должно достигать большой сложности O (n ^ 2) или хуже.Попробуй посмотреть, сможешь ли ты сделать это за большое O (n) время.- Файл должен быть прочитан в байтовый массив (8-битные значения) без превышения объема памяти.
Я читаю из используемого файла примера размером 50 МБ, строка за строкой и сохраняю строку вбайтовый массив затем вызывает метод checkDuplicate(byte[] arr)
и передает байтовый массив, а затем создает хэш-набор и перебирает элементы массива и добавляет их в хэш-набор, а затем возвращает размер хэш-набора.Поскольку хэш-наборы не допускают дублирования в основном, я проверяю, равен ли возвращенный размер размеру массива, чтобы определить, является ли он уникальным или нет, чтобы сохранить номер строки.
private int checkDuplicate(byte[] arr) {
HashSet<Byte> byteSet = new HashSet<Byte>();
int size=0;
for (byte e : arr){
if (e != 0 && byteSet.add(e)) {}
size = byteSet.size();
}
return size;
}
Может O (c) или O (n) будет достигнуто?Я получаю O (n ^ 2) до сих пор и буду обрабатывать исключения памяти позже, когда достигну O (n).
также, уменьшит ли решение проблемы в python сложность времени / пространства?