Я хотел проверить, для 12-значных чисел, если они принадлежали к серии Фибоначчи. Я написал следующий код, но он кажется неэффективным, и я столкнулся с ошибкой тайм-аута. Как я могу оптимизировать свой код?Напишите эффективный код для нижеприведенной программы?
Scanner sc=new Scanner(System.in);
List<Long> test_list=new ArrayList<>();
List<String> final_list=new ArrayList<>();
long cases=sc.nextLong();
for(int i=0;i<cases;i++)
{
long input=sc.nextLong();
test_list.add(input);
}
for(int j=0;j<test_list.size();j++)
{
long check_number=test_list.get(j);
long a=0l,b=1l,c=0l;
while(c<check_number)
{
c=a+b;
a=b;
b=c;
}
if(c == check_number)
{
final_list.add("IsFibo");
}
else
{
final_list.add("IsNotFibo");
}
}
for(String s:final_list)
{
System.out.println(s);
}
@DharmeshPorwal имеет googled ** what **? Я не могу придумать поиск Google, который будет полезен. Ты можешь? Ты это пробовал? – ajb
Почему вы каждый раз рассчитываете серию фибоначчи ?. Вы знаете, что номер имеет цифры «12», вы можете * может * жестко задавать значения ?. Рассчитать их только один раз, сохранить * локальный кеш *? – TheLostMind
@ajb Сортировка будет 'n log (n)', тогда как сохранение соответствующих значений серии (12 цифр) в хэш-таблице, а затем поиск в этой таблице будет «O (n)». Тем не менее, он не может быть расширен до более высоких значений серии (из-за памяти), а затем сортировка по введенным значениям будет хорошей идеей сохранить сложность памяти «O (n)» (предполагается, что она меньше, чем размер требуется для хранения необходимых значений серии), имея достаточно хорошее время вычисления – Dici