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

看板Python作者 (我只想耍廢)時間9年前 (2016/07/14 17:04), 9年前編輯推噓4(407)
留言11則, 6人參與, 最新討論串1/1
最近在練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; } }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.84.72 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1468487069.A.360.html

07/14 17:09, , 1F
C++ code貼一下啊
07/14 17:09, 1F

07/14 17:10, , 2F
python的 & (bit 運算) 費時超過加減法
07/14 17:10, 2F
※ 編輯: darkhcv (122.146.84.72), 07/14/2016 17:12:56

07/14 20:51, , 3F
a=-1, b=1 的時候你的解法似乎是過不了
07/14 20:51, 3F

07/14 21:38, , 4F
a=-1, b=1時,就是會出現"Time Limit Exceeded"
07/14 21:38, 4F

07/14 21:39, , 5F
我的理解是這個訊息表示跑太久了
07/14 21:39, 5F

07/14 21:39, , 6F
但是一樣的解法以c++來實做是可以測試通過的
07/14 21:39, 6F

07/14 23:14, , 7F
python整數沒寬度限制
07/14 23:14, 7F

07/14 23:15, , 8F
二補數的msb永遠是1 當然是無窮迴圈
07/14 23:15, 8F

07/14 23:24, , 9F
-1在python裡做bitwise op是0xff....ff無窮多個f
07/14 23:24, 9F

07/14 23:24, , 10F

07/15 07:37, , 11F
瞭解,謝謝~
07/15 07:37, 11F
文章代碼(AID): #1NXrMTDW (Python)
文章代碼(AID): #1NXrMTDW (Python)