From 1e5a462d6148fef483a3ecda998d04e70aef55a3 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Thu, 5 Nov 2020 01:29:38 +0800 Subject: [PATCH] auto commit --- ...64\346\225\260\346\254\241\346\226\271.md" | 42 +++++++++++------- ...64\346\225\260\346\254\241\346\226\271.md" | 42 +++++++++++------- notes/pics/image-20201105012506187.png | Bin 0 -> 9978 bytes 3 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 notes/pics/image-20201105012506187.png diff --git "a/docs/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" "b/docs/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" index 1cddc018a3..e8e579fc0b 100644 --- "a/docs/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" +++ "b/docs/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" @@ -1,37 +1,46 @@ # 16. 数值的整数次方 -[NowCoder](https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) +## 题目链接 + +[牛客网](https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) ## 题目描述 -给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。 +给定一个 double 类型的浮点数 x和 int 类型的整数 n,求 x 的 n 次方。 ## 解题思路 -下面的讨论中 x 代表 base,n 代表 exponent。 + + +最直观的解法是将 x 重复乘 n 次,x\*x\*x...\*x,那么时间复杂度为 O(N)。因为乘法是可交换的,所以可以将上述操作拆开成两半 (x\*x..\*x)\* (x\*x..\*x),两半的计算是一样的,因此只需要计算一次。而且对于新拆开的计算,又可以继续拆开。这就是分治思想,将原问题的规模拆成多个规模较小的子问题,最后子问题的解合并起来。 + +本题中子问题是 xn/2,在将子问题合并时将子问题的解乘于自身相乘即可。但如果 n 不为偶数,那么拆成两半还会剩下一个 x,在将子问题合并时还需要需要多乘于一个 x。 + - -

+

因为 (x\*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。 ```java -public double Power(double base, int exponent) { - if (exponent == 0) - return 1; - if (exponent == 1) - return base; +public double Power(double x, int n) { boolean isNegative = false; - if (exponent < 0) { - exponent = -exponent; + if (n < 0) { + n = -n; isNegative = true; } - double pow = Power(base * base, exponent / 2); - if (exponent % 2 != 0) - pow = pow * base; - return isNegative ? 1 / pow : pow; + double res = pow(x, n); + return isNegative ? 1 / res : res; +} + +private double pow(double x, int n) { + if (n == 0) return 1; + if (n == 1) return x; + double res = pow(x, n / 2); + res = res * res; + if (n % 2 != 0) res *= x; + return res; } ``` @@ -40,4 +49,5 @@ public double Power(double base, int exponent) { +
diff --git "a/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" "b/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" index 1cddc018a3..e8e579fc0b 100644 --- "a/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" +++ "b/notes/16. \346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" @@ -1,37 +1,46 @@ # 16. 数值的整数次方 -[NowCoder](https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) +## 题目链接 + +[牛客网](https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) ## 题目描述 -给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。 +给定一个 double 类型的浮点数 x和 int 类型的整数 n,求 x 的 n 次方。 ## 解题思路 -下面的讨论中 x 代表 base,n 代表 exponent。 + + +最直观的解法是将 x 重复乘 n 次,x\*x\*x...\*x,那么时间复杂度为 O(N)。因为乘法是可交换的,所以可以将上述操作拆开成两半 (x\*x..\*x)\* (x\*x..\*x),两半的计算是一样的,因此只需要计算一次。而且对于新拆开的计算,又可以继续拆开。这就是分治思想,将原问题的规模拆成多个规模较小的子问题,最后子问题的解合并起来。 + +本题中子问题是 xn/2,在将子问题合并时将子问题的解乘于自身相乘即可。但如果 n 不为偶数,那么拆成两半还会剩下一个 x,在将子问题合并时还需要需要多乘于一个 x。 + - -

+

因为 (x\*x)n/2 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。 ```java -public double Power(double base, int exponent) { - if (exponent == 0) - return 1; - if (exponent == 1) - return base; +public double Power(double x, int n) { boolean isNegative = false; - if (exponent < 0) { - exponent = -exponent; + if (n < 0) { + n = -n; isNegative = true; } - double pow = Power(base * base, exponent / 2); - if (exponent % 2 != 0) - pow = pow * base; - return isNegative ? 1 / pow : pow; + double res = pow(x, n); + return isNegative ? 1 / res : res; +} + +private double pow(double x, int n) { + if (n == 0) return 1; + if (n == 1) return x; + double res = pow(x, n / 2); + res = res * res; + if (n % 2 != 0) res *= x; + return res; } ``` @@ -40,4 +49,5 @@ public double Power(double base, int exponent) { +
diff --git a/notes/pics/image-20201105012506187.png b/notes/pics/image-20201105012506187.png new file mode 100644 index 0000000000000000000000000000000000000000..98e193dd3d838103e7b1adef48b9cff61d719897 GIT binary patch literal 9978 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 literal 0 HcmV?d00001