成功从阿里正岗干到了外包
下面是今日的大厂算法题
输入: x = 2.00000, n = 10 输出: 1024.00000 输入: x = 2.10000, n = 3 输出: 9.26100 输入: x = 2.00000, n = -2 输出: 0.25000
快速幂算法的基本思想:
递归基础:如果 n = 0,任何数的 0 次幂都是 1。 偶数幂:如果 n 是偶数,我们可以将 x^n 写成 (x^(n/2))^2。 奇数幂:如果 n 是奇数,则 x^n = x * x^(n-1),此时 n-1 是偶数。
处理负幂:
func myPow(x float64, n int) float64 {if n == 0 {return 1}if n < 0 {x = 1 / xn = -n}if n % 2 == 0 {half := myPow(x, n/2)return half * half} else {half := myPow(x, (n-1)/2)return half * half * x}}
Java实现
public double myPow(double x, int n) {long N = n;if (N < 0) {x = 1 / x;N = -N;}double ans = 1;double currentProduct = x;for (long i = N; i > 0; i /= 2) {if ((i % 2) == 1) {ans = ans * currentProduct;}currentProduct = currentProduct * currentProduct;}return ans;}
JavaScript实现
function myPow(x, n) {if (n === 0) return 1;if (n < 0) {x = 1 / x;n = -n;}return n % 2 === 0 ? myPow(x * x, n / 2) : x * myPow(x, n - 1);}
Python 代码实现
def myPow(x, n):if n == 0:return 1if n < 0:x = 1 / xn = -nif n % 2 == 0:return myPow(x * x, n // 2)else:return x * myPow(x * x, (n - 1) // 2)
算法解析
时间复杂度:O(log n)。由于每次递归 n 都会减半,因此总的递归层数是对数级别的。 空间复杂度:O(log n)。递归的深度决定了空间复杂度。
myPow(2.10000, 3)
9.26100
我是何老师,一位AI创业者,擅长各类AI的深度玩法,通过AI工具实现3个月涨粉20w+。代表团队参加多场创新创业大赛,其中在成都和重庆联合举办的创新创业大赛中,凭借着团队出色的AI项目获得二等奖的好成绩,并成功当选当地青联委员。
推荐阅读: