[问题] 新手解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