[問題] 新手解leetcode遇到performance問題

作者: darkhcv (我只想耍廢)   2016-07-14 17:04:25
最近在練LeetCode題目,因為也有在學python
所以就想說把剛剛用c++解的題目用python寫寫看
一樣的algorithm拿去跑結果出現 "Time Limit Exceeded"
想請教一下為何這樣的寫法在python下performance會不好?
我用c++寫一樣的邏輯有通過
class Solution(object):
def getSum(self, a, b):
if (a&b) == 0:
return a|b
while (a&b) != 0:
bit_add = a^b
carry = (a&b) << 1
a = bit_add
b = carry
return a|b
C++版
class Solution {
public:
int getSum(int a, int b) {
if ((a&b) == 0) return a|b;
while ((a&b) != 0) {
int bit_add = a^b;
int carry = (a&b) << 1;
a = bit_add;
b = carry;
}
return a|b;
}
};
作者: tiefblau (tiefblau)   2016-07-14 17:09:00
C++ code貼一下啊
作者: Yshuan (倚絃)   2016-07-14 17:10:00
python的 & (bit 運算) 費時超過加減法
作者: withoutshine (何必幫別人想那麼多)   2016-07-14 20:51:00
a=-1, b=1 的時候你的解法似乎是過不了
作者: darkhcv (我只想耍廢)   2016-07-14 21:38:00
a=-1, b=1時,就是會出現"Time Limit Exceeded"我的理解是這個訊息表示跑太久了但是一樣的解法以c++來實做是可以測試通過的
作者: CaptainH (Cannon)   2016-07-14 23:14:00
python整數沒寬度限制二補數的msb永遠是1 當然是無窮迴圈
作者: ckc1ark (偽物)   2016-07-14 23:24:00
-1在python裡做bitwise op是0xff....ff無窮多個f詳見 https://wiki.python.org/moin/BitwiseOperators
作者: darkhcv (我只想耍廢)   2016-07-15 07:37:00
瞭解,謝謝~

Links booklink

Contact Us: admin [ a t ] ucptt.com