使用Python查詢環形跑道中最常訪問的區域的程式
假設我們有一個數字n和一個名為rounds的陣列。我們有一個環形跑道,它由n個不同的區域組成,編號從1到n。現在考慮在這個跑道上進行一場比賽,比賽包括m個不同的回合。第i回合從rounds[i-1]區域開始,在rounds[i]區域結束。例如,如果第1回合從rounds[0]區域開始,在rounds[1]區域結束。因此,我們必須找到按升序排列的訪問次數最多的區域。(跑道的編號按逆時針方向的區域編號升序排列)
因此,如果輸入類似於n = 4 rounds = [1,3,1,2],則輸出將為[1, 2]

因為比賽從1號區域開始。訪問的區域順序如下:[1,2,3(第一回合結束),4,1(第二回合結束),2(第三回合結束)]。這裡1號和2號區域都被訪問了兩次,它們是訪問次數最多的區域。而3號和4號區域只訪問了一次。
為了解決這個問題,我們將遵循以下步驟:
d := 一個新的對映
對於j從1到n,執行:
d[j] := 0
d[rounds[0]] := 1
對於i從1到rounds的大小-1,執行:
如果rounds[i] > rounds[i-1],則:
對於j從rounds[i-1]+1到rounds[i]+1,執行:
d[j] := d[j] + 1
否則:
對於j從rounds[i-1]+1到n,執行:
d[j] := d[j] + 1
對於j從1到rounds[i],執行:
d[j] := d[j] + 1
curr := d[rounds[0]]
out := [rounds[0]]
對於i從1到n,執行:
如果i與rounds[0]不同,則:
如果d[i] > curr,則:
curr := d[i]
out := [i]
否則,當d[i]與curr相同時,則:
將i新增到out中
排序後返回out
示例(Python)
讓我們來看下面的實現,以便更好地理解:
def solve(n, rounds):
d = {}
for j in range(1,n+1):
d[j] = 0
d[rounds[0]] = 1
for i in range(1, len(rounds)):
if rounds[i] > rounds[i-1]:
for j in range(rounds[i-1]+1, rounds[i]+1):
d[j] += 1
else:
for j in range(rounds[i-1]+1,n+1):
d[j] += 1
for j in range(1,rounds[i]+1):
d[j] += 1
curr = d[rounds[0]]
out = [rounds[0]]
for i in range(1,n+1):
if i != rounds[0]:
if d[i] > curr:
curr = d[i]
out = [i]
elif d[i] == curr:
out = out + [i]
return(sorted(out))
n = 4
rounds = [1,3,1,2]
print(solve(n, rounds))輸入
4, [1,3,1,2]
輸出
[1, 2]
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP