Leetcode 1560. Most Visited Sector in a Circular Track
题目
解法:brutal force
没有仔细思考规律就是写的这么丑陋
class Solution:
def mostVisited(self, n: int, rounds: List[int]) -> List[int]:
d = collections.defaultdict(int)
for i in range(len(rounds)-1):
if rounds[i+1]>rounds[i]:
for num in range(rounds[i],rounds[i+1]):
d[num] += 1
if rounds[i+1]<rounds[i]:
for num in range(rounds[i],n+1):
d[num] += 1
for num in range(1,rounds[i+1]):
d[num] += 1
d[rounds[-1]] += 1
ans = []
for k,v in d.items():
if not ans:
ans.append(k)
else:
if v!=d[ans[-1]]:
break
else:
ans.append(k)
return sorted(ans)
解法2:
发现了规律就是这么简洁,按道理这是个easy的题目,所以肯定是有很简单的规律可循的
class Solution:
def mostVisited(self, n: int, rounds: List[int]) -> List[int]:
start = rounds[0]
end = rounds[-1]
# if start < end, all the numbers between [start,end] inclusive will appear for the most times
if start<=end:
return list(range(start,end+1))
# else, the numbers between (end,start) exlusive will appear for 1 less times
else:
exclude = list(range(end+1,start))
return [i for i in range(1,n+1) if i not in exclude]
参考:https://leetcode.com/problems/most-visited-sector-in-a-circular-track/discuss/904710/Python-simple-range-iteration