Если вы хотите получить действительно быстро, вы можете использовать таблицу поиска. Я предполагаю, что именно к этому стремился интервьюер (в качестве окончательного ответа на вопрос «как я могу сделать это быстрее»).
По сути, это означает, что вы заранее создаете огромную таблицу, сопоставляя каждую возможную комбинацию параметров с правильным результатом. Например, у вас будет:
byte = 0x0, pos = 0, result = 0
byte = 0x0, pos = 1, result = 0
...
byte = 0x1, pos = 0, result = 1
Очевидно, что это необходимо поместить в допустимые структуры данных c (массивы, проиндексированные байтом и положением). Это позволит вам в вашей функции просто возвращать место в массиве на основе любой схемы индексации, которую вы выберете.
Для первой функции это не займет слишком много памяти. Мы говорим о значении байтовых значений (байт может иметь 256 различных значений), умноженных на 8 возможных значений для запуска pos, что составляет массив 2048.
Для второй функции, , на самом деле это заняло бы намного больше места. Вам нужно умножить 256 возможных значений для начального и конечного положений (помните, что существуют недопустимые комбинации начального и конечного положений).
Полагаю, что интервьюер просто хотел, чтобы вы ответили, что это будет способ ускорить его, а затем предложите вышеизложенное, чтобы попытаться оценить, сколько места это будет стоить по сравнению с сэкономленным временем.