pow(x, n)
方法一:暴力法
思路
只需模擬將x
相乘n
次的過程。
如果 \(n < 0\),我們可以直接用 \(\dfrac\), \(-n\) 來替換 \(x , n\) 以保證 \(n \ge 0\)。該限制可以簡化我們的進一步討論。
但我們需要注意極端情況,尤其是負整數和正整數的不同範圍限制。
演算法
我們可以用乙個簡單的迴圈來計算結果。
class solution
double ans = 1;
for (long long i = 0; i < n; i++)
ans = ans * x;
return ans;}};
複雜度分析方法二:遞迴快速冪演算法
複雜度分析方法三:迭代快速冪演算法
遞迴或迭代的快速冪實際上是實現同一目標的不同方式。
class solution
double ans = 1;
double current_product = x;
for (long long i = n; i ; i /= 2)
current_product = current_product * current_product;
}return ans;}};
複雜度分析位運算實現pow(x,n)
根據暴力法的思路來看特別簡單,但通過位運算呢?
位運算技巧
我舉個例子吧,例如 n = 13,則 n 的二進位制表示為 1101, 那麼 m 的 13 次方可以拆解為:
\(m^ = m^ * m^ * m^\)。
我們可以通過 & 1和 >>1 來逐位讀取 1101,為1時將該位代表的乘數累乘到最終結果。直接看**吧,反而容易理解:
int pow(int n)
tmp *= tmp;
n = n >> 1;
}return sum;
}
時間複雜度近為 \(o(logn)\),而且看起來很 快速排序的四種優化方式
本文只講述概念。選用基準值 不在四種優化方式中 選用基準值有三種方式,選用的基準值較好,快速排序的效能也會較好。1.當資料量到達一定大小是,選擇使用插入排序或者堆排序 插入排序 當遞迴之後序列到達某一大小時,相對每個遞迴陣列中的資料元素較少 一般 16時 在使用遞迴顯然會增加遞迴的深度,所以可以選用...
v for的四種使用方式
在vue中使用v for遍歷陣列時v for最常見的一種使用方式。1 先在data中定義陣列 arr 1 2,3 4,5 2 在標籤中遍歷 for item,index in arr 數值 索引 物件陣列,其實說到底也是陣列,使用方式上和陣列一模一樣。1 先在data中定義陣列 objarr 2 在...
管道使用的四種特殊方式
程序之間通訊最簡單的方式 管道通訊 使用管道需要注意以下4種特殊情況 假設都是阻塞i o操作,沒有設定o nonblock標誌 如果所有指向管道寫端的檔案描述符都關閉了 管道寫端的引用計數等於0 而仍然有程序從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一...