题目
设计一个高效的求a的n次幂的算法
思路
- 采用for循环,比如2的三次方(3^2),循环3次,222 = 8,时间复杂度为O(n);
- O(n)往下就是O(log(n))了,对于增长到指定数类的题目,当基数呈指数级增长时(2,4,8,16,32,64,128),时间复杂度为O(log(n)),这里就是要让a的指数从1到n呈指数增长,而不是1,2,3…n这样子
- 所以考虑让a的指数翻倍增长,即(1,2,4,8…n),即每次res=resres (res初始为a)而不是res=resa ,这样的话res=2^k, 每次res翻倍k 可能会超过n,所以需要判断条件
代码实现
1 | /* |