劍指offer 國王的遊戲(冪運算)

2021-10-04 21:24:03 字數 861 閱讀 8971

我們接觸冪運算都是來自於那個著名的傳說——國王的公尺粒棋盤遊戲。在這個傳說裡,最為核心的就是越往後計算量越大。所以,在求解冪運算的時候,降低時間複雜度就很關鍵。

本文主要採用了快速冪演算法和位運算來進行優化。

如果採用傳統的的逐項相乘的方法,雖然可以通過算例,但是時間複雜度為o(n)。

double

power

(double base,

int exponent)

else

if(exponent <0)

return result;

}

耗時3ms,記憶體占用592k。

快速冪執行就是通過增大底數來縮小指數的方法。例如求10的100次方,可以寫為100的50次方,那麼100次迴圈就降為了50次。所以快速冪演算法的時間複雜度為o(logn)。

進一步的,在取餘和除以2的時候,可以使用位運算來代替。

取餘即為與1相與,1是000…1,相與結果即為最後一位。與2相除即為右移一位,而且還是整數除法,因為最後一位的1會被捨去。

double result=1;

if(base==0)

return0;

else

if(exponent ==0)

return result;

else

if(exponent >0)

}else

if(exponent <0)

result =

1.0/result ;

}return result;

**中在指數取余為1時,結果才會與底數相乘,不過顯然迴圈的最後一步指數一定是1,所以最後前n項積一定會與底數相乘。

劍指Offer(五) 位運算

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。位運算 coding utf 8 class solution def add self,num1,num2 write code here a,b num1,num2 while b 0 a,b a b,a b 1 a 0xffff...

劍指offer 孩子們的遊戲

每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...

劍指 offer 孩子們的遊戲

每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...