簡體   English   中英

如何在 python 中使這段代碼更快(算法問題)

[英]How to make this code faster in python (algorithm question)

今天我正在瀏覽一些我看到的問題:算法 - 空戰

C++時間限制:1秒Java時間限制:2秒Python時間限制:10秒內存限制:256 MB

排成一排的戰斗機有很多,而且它們都離地面有不同的高度。 每架戰斗機只能瞄准它的前部戰斗機,前提是它們的高度小於正在調查的戰斗機的高度。

戰斗機可以瞄准的戰斗機數量稱為戰略數量。 例如,如果戰斗機 A 可以針對 3 名戰斗機,我們說戰斗機 A 的戰略數量為 3。

獲取所有戰士的總戰略數量。

Entraces:輸入的第一行出現n,表示戰士的數量。 然后在下一行中,n 個戰士的高度從 h_i 開始。

    0001≤n≤100 000
    0001≤h≤100 000

輸出:

在輸出中,打印所有戰斗機的戰略數量之和。

樣本輸入 1:

5

5 4 3 7 6

樣本輸出 1 4

我為它編寫了這段代碼(在python中),但時間限制將大量傳遞:

n = int(input())
players = list(map(int, input().split()))
c = 0
for index, player in enumerate(players, 1):
    c += len([num for num in players[index:] if num < player])
print(c)

該方法在很大程度上類似於計算數組中的反轉

在合並步驟中,維護兩個指針(每半個指針)。 讓每個被比較的兩個元素是i (從左半部分)和j (從右半部分)。 如果i<ji也將小於j右側的所有元素。 您可以相應地增加i的計數,並移動其指針。 這個“提示”應該足以讓您實施解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM