From 245203898959e13593cd319084000dce2bb41ef7 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:17:59 +0800 Subject: [PATCH] =?UTF-8?q?Update=2016.=20=E6=95=B0=E5=80=BC=E7=9A=84?= =?UTF-8?q?=E6=95=B4=E6=95=B0=E6=AC=A1=E6=96=B9.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整递归时间复杂度的公式表述,补充负数指数及 Integer.MIN_VALUE 边界溢出的处理说明。 --- notes/16. 数值的整数次方.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/notes/16. 数值的整数次方.md b/notes/16. 数值的整数次方.md index 7760cb09..a57c5afd 100644 --- a/notes/16. 数值的整数次方.md +++ b/notes/16. 数值的整数次方.md @@ -14,12 +14,11 @@ 本题中子问题是 xn/2,在将子问题合并时将子问题的解与自身相乘即可。但如果 n 不为偶数,那么拆成两半还会剩下一个 x,在将子问题合并时还需要多乘一个 x。 - -

+因为 xn/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。 -因为 (x\*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。 +n 为负数时,先把 x 换成 1/x,再求 x 的 -n 次方。需要注意的是,n 为 Integer.MIN_VALUE 时 -n 会溢出,因此先转成 long 再取反。 ```java public double myPow(double x, int n) {