สมมติว่าเรามีตัวเลข n และอาร์เรย์ที่เรียกว่า round เรามีเส้นทางวงกลมซึ่งประกอบด้วย n ส่วนต่างๆ ที่มีป้ายกำกับตั้งแต่ 1 ถึง n ตอนนี้พิจารณาการแข่งขันที่จะจัดขึ้นบนเส้นทางนี้ การแข่งขันประกอบด้วย m รอบที่แตกต่างกัน รอบที่ ith เริ่มต้นที่รอบเซกเตอร์[i - 1] และสิ้นสุดที่รอบเซกเตอร์[i] ตัวอย่างเช่น หากรอบที่ 1 เริ่มที่รอบเซกเตอร์[0] และสิ้นสุดที่รอบเซกเตอร์[1] ดังนั้นเราจึงต้องหาภาคที่เข้าชมมากที่สุดโดยเรียงลำดับจากน้อยไปมาก (หมายเลขแทร็กจะเรียงลำดับจากน้อยไปหามากในทิศทวนเข็มนาฬิกา)
ดังนั้น หากอินพุตเป็น n =4 รอบ =[1,3,1,2] ผลลัพธ์จะเป็น [1, 2]

เพราะการแข่งขันเริ่มจากเซกเตอร์ 1 ลำดับของเซกเตอร์ที่เข้าชมมีดังนี้ [1,2,3 (จบรอบแรก),4,1 (จบรอบที่สอง), 2 (จบรอบที่ 3)] ที่นี่ทั้งภาค 1 และ 2 มีการเยี่ยมชมสองครั้งและเป็นภาคส่วนที่มีผู้เข้าชมมากที่สุด และส่วนที่ 3 และ 4 เข้าชมเพียงครั้งเดียวเท่านั้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
d :=แผนที่ใหม่
-
สำหรับ j ในช่วง 1 ถึง n ทำ
-
d[j] :=0
-
-
d[รอบ[0]] :=1
-
สำหรับฉันในช่วง 1 ถึงขนาดของรอบ - 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 ถึงปัดเศษ[i] ทำ
-
d[j] :=d[j] + 1
-
-
-
-
curr :=d[rounds[0]]
-
ออก :=[รอบ[0]]
-
สำหรับผมอยู่ในช่วง 1 ถึง n ทำ
-
ถ้าฉันไม่เหมือนกับ rounds[0] งั้น
-
ถ้า d[i]> curr แล้ว
-
สกุลเงิน :=d[i]
-
ออก :=[i]
-
-
มิฉะนั้นเมื่อ d[i] เหมือนกับ curr แล้ว
-
ต่อท้าย i โดยไม่ใช้
-
-
-
-
กลับออกมาหลังจากจัดเรียง
ตัวอย่าง (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]