Я пытался решить случайное кодирование ката и нашел это, мой вопрос здесь заключается в том, каков оптимальный алгоритм и лучший подход к проектированию для решения этого ката?
Учитывая последовательность чисел, определить типпоследовательность, вычислить и вернуть следующее число в последовательности.
Integer guessNextNumber(List<Integer> sequence);
Данная последовательность может быть одного из двух типов, арифметической последовательности и геометрической последовательности.
Арифметическая последовательность определяется как: Arith_seq(p, q) = p, p + q, (p + q) + q,… Пример: Arith_seq (7,3) = 7, 10, 13, 16, 19,…
Геометрическая последовательностьопределяется как: Geo_seq (p, q) = p, p * q, (p * q) * q,… Пример: Geo_seq (2,3) = 2, 6, 18, 54,…
Ожидаетсявход и выход: входная последовательность будет иметь как минимум 3 числа.Для входной последовательности (7, 10, 13, 16, 19) возвращаемое значение будет 22. Для входной последовательности (2, 6, 18, 54) возвращаемое значение будет 162.
Алгоритм:
- Проверьте входную последовательность, если у нас есть последовательность как (a, b, c), тогда,
, если разница между элементами последовательности (ba) или (cb)равен его арифметической последовательности.
если разделение между элементами последовательности равно, например: b / a и c / b, то его геометрическая последовательность
Мой вопрос, что будетбыть оптимальным алгоритмом для его решения?
Обновление: возможно ли решить это постоянное время выполнения?