无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

算法:數(shù)值的整數(shù)次方

2022-07-02 01:30 作者:做架構(gòu)師不做框架師  | 我要投稿


實現(xiàn) pow(x, n) ,即計算 x 的 n 次冪函數(shù)(即,xn)。不得使用庫函數(shù),同時不需要考慮大數(shù)問題。

示例

  • 輸入:x = 2.00000, n = 10

  • 輸出:1024.00000

提示

  • -100.0 < x < 100.0

  • -2的31次方 <= n <= 2的31次方 -1

  • -10的4次方 <= x的n次方 <= 10的4方

方法一:快速冪 + 遞歸

「快速冪算法」的本質(zhì)是分治算法。

以示例為例,從 2 開始,每次直接把上一次的結(jié)果進(jìn)行平方,計算3次就可以得到2的10次方值,我們可以按照:

  • x → x的2次方 → x的5次方 → x的10次方的順序。

直接從左到右進(jìn)行推導(dǎo)看上去很困難,因為在每一步中,我們不知道在將上一次的結(jié)果平方之后,還需不需要額外乘 x。但如果我們從右往左看,分治的思想就十分明顯了。

代碼如下:

復(fù)雜度分析

  • 時間復(fù)雜度:O(logn),即為遞歸的層數(shù)(由于每次遞歸都會使得指數(shù)減少一半)。

  • 空間復(fù)雜度:O(logn),即為遞歸的層數(shù)。這是由于遞歸的函數(shù)調(diào)用會使用棧空間。

方法二:快速冪 + 迭代

由于遞歸需要使用額外的??臻g,我們試著將遞歸轉(zhuǎn)寫為迭代。

我們以 x 的77次方 作為例子:

  • x → x的2次方 → x的4次方→ x的9次方 → x的19次方 → x的38次方 → x的77次方;

可以發(fā)現(xiàn):

  • x的38次方 到 x的77次方 中額外乘的 x 在 x的77次方 中貢獻(xiàn)了 x;

  • x的9次方 到 x的19次方 中額外乘的 x 在 之后被平方了 2 次,因此在 x的77次方 中貢獻(xiàn)了 x的4次方;

  • x的4次方 到 x的9次方 中額外乘的 x 在之后被平方了 3 次, 因此在 x的77次方 中貢獻(xiàn)了 x的8次方;

  • 最初的 x 在之后被平方了 6 次,因此在 x的77次方 中貢獻(xiàn)了 x的64次方。

我們把這些貢獻(xiàn)相乘,x * x的4次方 * x的8次方 * x的64次方 恰好等于 x的77次方。而這些貢獻(xiàn)的指數(shù)部分又是什么呢?它們都是 2 的冪次,這是因為每個額外乘的 x 在之后都會被平方若干次。而這些指數(shù) 1,4,8 和 64,恰好就對應(yīng)了 77 的二進(jìn)制表示 (1001101)2 中的每個 1!

這樣以來,我們從 x 開始不斷地進(jìn)行平方,如果 n 的第 k 個(從右往左,從 0 開始計數(shù))二進(jìn)制位為 1,那么我們就將對應(yīng)的貢獻(xiàn)

x的(2的k次方)次方 計入答案。

代碼如下:

復(fù)雜度分析

  • 時間復(fù)雜度:O(logn),即為對 n 進(jìn)行二進(jìn)制拆分的時間復(fù)雜度。

  • 空間復(fù)雜度:O(1)。

END

本文內(nèi)容出處是力扣官網(wǎng),希望和大家一起刷算法,在后面的路上不變禿但是變強(qiáng)!

好兄弟可以點贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。


算法:數(shù)值的整數(shù)次方的評論 (共 條)

分享到微博請遵守國家法律
濮阳县| 宁晋县| 梧州市| 军事| 洱源县| 隆子县| 板桥市| 平谷区| 通许县| 淳化县| 炎陵县| 武隆县| 勃利县| 岳阳市| 清苑县| 长白| 哈密市| 麻城市| 平顺县| 泗阳县| 革吉县| 和顺县| 阳城县| 青岛市| 余干县| 利川市| 花莲县| 电白县| 临沧市| 巴青县| 汾阳市| 黑龙江省| 东台市| 柘城县| 固阳县| 外汇| 苏尼特左旗| 余干县| 玉树县| 久治县| 京山县|