2017-05-02 81 views
0
www.codingame.com  

任務比較NUMS需要優化(codingame.com)

Write a program which, using a given number of strengths, 
identifies the two closest strengths and shows their difference with an integer 

信息

n = Number of horses 
pi = strength of each horse 
d = difference 

1 < n < 100000 
0 < pi ≤ 10000000 

我的代碼目前

def get_dif(a, b): 
    return abs(a - b) 

horse_str = [10, 5, 15, 17, 3, 8, 11, 28, 6, 55, 7] 
n = len(horse_str) 
d = 10000001 

for x in range(len(horse_str)): 
    for y in range(x, len(horse_str) - 1): 
     d = min([get_dif(horse_str[x], horse_str[y + 1]), d]) 

print(d) 

測試用例

[3,5,8, 9] outputs: 1 
[10, 5, 15, 17, 3, 8, 11, 28, 6, 55, 7] outputs: 1 

問題

他們都工作,但在以後的測試給了我一個很長的馬長處名單,我得到** Process has timed out. This may mean that your solution is not optimized enough to handle some cases.

哪有我優化它?謝謝!

EDIT ONE

默認代碼中給出

import sys 
import math 

# Auto-generated code below aims at helping you parse 
# the standard input according to the problem statement. 

n = int(input()) 
for i in range(n): 
    pi = int(input()) 

# Write an action using print 
# To debug: print("Debug messages...", file=sys.stderr) 

print("answer") 
+0

首先,這並不是冒泡。其次,你爲什麼要使用bubblesort? – user2357112

+0

你可以使用python內建'sort'嗎? –

+0

@ user2357112有用的意見將是不錯的 –

回答

1

由於可以使用sort方法(其被優化,以避免執行具有O(n**2)複雜昂貴的冒泡排序或通過手雙環,並列出一個非常大的列表),讓我提出一些建議:

  • 排序列表
  • 計算最小的相鄰值的差的絕對值,使發電機理解到min功能

最低必須是相鄰值的絕對差。由於列表使用快速算法進行排序,所以繁重的工作將爲您完成。

這樣的:

horse_str = [10, 5, 15, 17, 3, 8, 11, 28, 6, 55, 7] 

sh = sorted(horse_str) 
print(min(abs(sh[i]-sh[i+1]) for i in range(len(sh)-1))) 

我也得到1結果(我希望我沒有錯過任何東西)

+0

當然哦!不知道爲什麼我沒有考慮將它分類爲以哈哈開頭! –

+0

我會讓你把它提交給你的在線引擎,並接受它的工作原理。 –

+0

是的,它再次感謝你 –