通过这个案例我来向大家演示,如何通过思路的转换来降低代码的时间复杂度。
例如:2022年蓝桥杯省赛题目
对于这样典型的递推题目,我们第一时间想到的可能就是,嵌套循环。
也就是说,先用一层循环for(int i;i<+n;i++),然后循环体中加入语句来表示a1,a2,a3~
在使用一层嵌套循环,在循环体找那个加入语句来表示a1+a2+a3~。
这样的代码,从逻辑上看,好像没有任何问题,考虑到了所有情况,而且能精准计算出结果,那是不是这样就行了呢?
Of course not.
当然不是。
我们粗略算一算,题目中给定的n<=200000,a<=1000,如果按照上面的思路来做,时间复杂度大致为200000*20