LEETCODE | PYTHON | 1560 | 圆形赛道上经过次数最多的扇区
1. 题目
给你一个整数 n 和一个整数数组 rounds 。有一条圆形赛道由 n 个扇区组成,扇区编号从 1 到 n 。现将在这条赛道上举办一场马拉松比赛,该马拉松全程由 m 个阶段组成。其中,第 i 个阶段将会从扇区 rounds[i - 1] 开始,到扇区 rounds[i] 结束。举例来说,第 1 阶段从 rounds[0] 开始,到 rounds[1] 结束。
请你以数组形式返回经过次数最多的那几个扇区,按扇区编号 升序 排列。
注意,赛道按扇区编号升序逆时针形成一个圆(请参见第一个示例)。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/most-visited-sector-in-a-circular-track
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 代码
class Solution:
def mostVisited(self, n: int, rounds: List[int]) -> List[int]:
#rounds = [2,1,2,1,2,1,2,1,2]
#n = 2
#建立空数组计数
count = [0]*n
#遍历确定到达次数
for i in range(1,len(rounds)):
#确定起终点
start = rounds[i-1]
end = rounds[i]
#print(start,end)
#确定经过区域并计数
if end > start:
for tmp in range(start,end):
count[tmp-1] = count[tmp-1] + 1
#若需跨圈
else:
for tmp in range(start,n+1):
count[tmp-1] = count[tmp-1] + 1
for tmp in range(1,end):
count[tmp-1] = count[tmp-1] + 1
#print(count)
#增加结束点位置
count[rounds[-1]-1] = count[rounds[-1]-1] + 1
#确定最大到达区域
res = []
Max = max(count)
for i in range(len(count)):
if count[i] == Max:
res.append(i+1)
return res