Nay thấy topic này vắng quá. Nên mình sẽ share bài mình mới làm chiều nay.
https://leetcode.com/problems/powx-n/
Yêu cầu là implement hàm pow.
Đọc đề xong thấy bài này easy vkl, k hiểu sao lại là medium, nghĩ trong bụng bài này chắc done trong 1 nốt nhạc. Chỉ cần 1 vòng for chạy từ 0->n rồi nhân lại là xong. dpt là O(n)

. Đến lúc submit thì bị timeout

.
Lúc đó ngồi nghĩ kỹ lại mới thấy bài này hoàn toàn có thể giải với đpt là O(logN)

.
tại vì m^n = m^(n/2)*m^(n/2) như vậy mình chỉ cần tính m^(n/2) 1 lần thôi.
C++:
class Solution {
public:
double myPow(double x, int n) {
double result = 1;
x = n > 0 ? x : 1/x;
for (int i = 0; n != 0; i++){
result *= n%2!=0 ? x : 1;
n/=2;
x = x*x;
}
return result;
}
};
Bài này chắc là kinh điển, nên chắc nhiều anh em cũng từng làm qua rồi.