所以我試圖通過HackerRank上的動態規劃跟蹤。HackerRank最大子陣列
問題提示如下。
鑑於陣列A = {A1,A2,...,A N}的N個元素的,找到一個
毗連子陣列的非連續的(不一定是連續的)子陣列的最大可能的總和。 不應考慮空的子陣列/子序列。
輸入格式
輸入的第一行具有整數Ť。 T個案如下。每個測試用例都以整數N開頭。在下一行中,N整數代表陣列A。
約束上:
你認爲至少應該有一個元素子陣列和子序列。
輸出格式
二,分隔空間,整體表示的最大的連續和非連續的子陣列。至少應選擇一個整數並放入子陣列(在所有元素均爲負數的情況下可能需要)。
採樣輸入
2
4
1 2 3 4
6
2 -1 2 3 4 -5
樣本輸出
10 10
10 11
說明
在第一種情況: 兩個連續的和非連續的元件的最大總和的所有元素的總和(因爲它們都是正數) 。
在第二種情況下: [2 -1 2 3 4] - >這形成了具有最大總和的連續子陣列。 對於不必要連續的元素組的最大和,只需添加所有的正元素。
我對這個解決方案是
def dp2(L):
max_so_far = max_ending_here = -2**31 # contig logic works
non_contig = [L[0]] # accounting for negative arrays
for i in xrange(len(L[0::])):
max_ending_here = max(L[i], max_ending_here + L[i])
max_so_far = max(max_so_far, max_ending_here)
# non-contiguous logic
if i != 0:
non_contig.append(max(non_contig[-1], non_contig[-1] + L[i]))
return map(str, (max_so_far, non_contig[-1]))
if __name__ == '__main__':
test_cases = int(raw_input())
for i in xrange(test_cases):
arr_length = int(raw_input())
array = [int(i) for i in raw_input().split()]
print ' '.join(dp2(array))
所以上面的代碼通過了所有,但一個測試用例。這是非常大的,所以我決定上傳所有的測試用例到一個單元測試中,並在我的本地環境中運行,看看發生了什麼。
.F..
======================================================================
FAIL: test_answers_against_test_case2_outputs (__main__.TestCase2)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_max_subarray.py", line 52, in test_answers_against_test_case2_outputs
self.assertEqual(result, self.outputs[idx])
AssertionError: Lists differ: ['2617065', '172073086'] != [u'2617065', u'172083036']
First differing element 1:
172073086
172083036
- ['2617065', '172073086']
? ^^
+ [u'2617065', u'172083036']
? + + ^^
----------------------------------------------------------------------
Ran 4 tests in 0.951s
FAILED (failures=1)
有兩個數字是在問候非連續答案DP功能吐出不正確。這可能是從整數轉換爲字符串的問題嗎?
我意識到我正在比較unicode和python字符串,但它似乎並不重要,因爲我用其他方式嘗試過,所以我不認爲這是問題,但我可能是錯的。
你應該接受你自己的答案,以便它顯示爲正確的答案。 –
發佈後的2天內我無法接受我自己的答案。有沒有辦法解決這個問題? – trendsetter37
沒有。對不起,我忘了這件事。 :d –