LeetCode刷題記錄

2021-10-23 13:19:10 字數 945 閱讀 2164

這道題讓我們求x的n次方,如果只是簡單的用個 for 迴圈讓x乘以自己n次的話,未免也把 leetcode 上的題想的太簡單了,一句話形容圖樣圖森破啊。oj 因超時無法通過,所以需要優化,使其在更有效的算出結果來們可以用遞迴來折半計算,每次把n縮小一半,這樣n最終會縮小到0,任何數的0次方都為1,這時候再往回乘,如果此時n是偶數,直接把上次遞迴得到的值算個平方返回即可,如果是奇數,則還需要乘上個x的值。還有一點需要引起注意的是n有可能為負數,對於n是負數的情況,我可以先用其絕對值計算出乙個結果再取其倒數即可,之前是可以的,但是現在 test case 中加了個負2的31次方後,這就不行了,因為其絕對值超過了整型最大值,會有溢位錯誤,不過可以用另一種寫法只用乙個函式,在每次遞迴中處理n的正負,然後做相應的變換即可,**如下:

class solution 

};

class solution 

return res;

}};

這道題要求我們求平方根,我們能想到的方法就是算乙個候選值的平方,然後和x比較大小,為了縮短查詢時間,我們採用二分搜尋法來找平方根,這裡屬於博主之前總結的 leetcode binary search summary 二分搜尋法小結 中的第三類的變形,找最後乙個不大於目標值的數,這裡細心的童鞋可能會有疑問,在總結貼中第三類博主的 right 用的是開區間,那麼這裡為啥 right 初始化為x,而不是 x+1 呢?因為總結帖裡的 left 和 right 都是陣列下標,這裡的 left 和 right 直接就是數字本身了,乙個數字的平方根是不可能比起本身還大的,所以不用加1,還有就是這裡若x是整型最大值,再加1就會溢位。最後就是返回值是 right-1,因為題目中說了要把小數部分減去,只有減1才能得到正確的值,**如下:

class solution 

return right - 1;

}};

leetcode刷題記錄

我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...

LeetCode刷題記錄

動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...

leetcode刷題記錄

工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...