所以我一直試圖解決的問題3SUM很好工作,下面是我的算法修改3SUM算法不與浮點
def findThree(seq, goal):
for x in range(len(seq)-1):
left = x+1
right = len(seq)-1
while (left < right):
tmp = seq[left] + seq[right] + seq[x]
if tmp > goal:
right -= 1
elif tmp < goal:
left += 1
else:
return [seq[left],seq[right],seq[x]]
正如你可以看到它是一個非常通用的算法,解決它在O(n )。
我一直在經歷的問題是,這個算法似乎不喜歡使用浮點數。
爲了測試我的理論是正確的,我給它下面的兩個陣列
FloatingArr = [89.95, 120.0, 140.0, 179.95, 199.95, 259.95, 259.95, 259.95, 320.0, 320.0]
IntArr = [89, 120, 140, 179, 199, 259, 259, 259, 320, 320]
findThree(FloatingArr, 779.85) // I want it to return [259.95, 259.95, 259,95]
>> None // Fail
findThree(FloatingArr, 777) // I want it to return [259,259,259]
>> [259, 259, 259] // Success
該算法的工作,但它似乎並不浮點數很好地工作。我能做些什麼來解決這個問題?
有關其他信息,我的第一個數組原本是價格字符串的列表,但爲了與他們做數學計算,我不得不去掉「$」符號。我的做法是這樣的
for x in range(len(prices)):
prices[x] = float(prices[x][1:]) // return all the prices without the "$" sign. Casting them to float.
如果有更好的方法,請讓我知道。我感覺好像這個問題不是真的findThree()而是我如何修改原始價格數組。
編輯:看到這確實是一個浮點問題,我想我的下一個問題是什麼是脫離「$」後將字符串轉換爲int的最佳方法?
'0。1 + 0.2!= 0.3'。閱讀[浮點舍入問題](http://floating-point-gui.de/basic/)。 – user2357112 2014-09-21 18:00:28
價格最初是如何儲存的(使用何種格式)? – kraskevich 2014-09-21 18:09:01
@ user2040251原來是這樣的['$ 120.00','$ 140.00','$ 179.95','$ 199.95','$ 259.95','$ 259.95','$ 259.95','$ 320.00','$ 320.00','$ 89.95'] – user3277633 2014-09-21 18:15:35