使用Python查找环形轨道中最多被访问的区域的程序

使用Python查找环形轨道中最多被访问的区域的程序

假设我们有一个数字n和一个名为rounds的数组。我们有一个由1到n标记的n个不同扇区组成的环形轨道。现在考虑将在此轨道上举行比赛,比赛由m不同的回合组成。第i回合从扇区rounds [i-1]开始,以扇区rounds [i]结束。例如,如果第1回合从扇区rounds [0]开始,并以扇区rounds [1]结束。因此,我们必须按升序排序找到最多的访问扇区。(轨道数字顺时针方向按扇区编号升序排列)

所以,如果输入为n = 4 rounds = [1,3,1,2],则输出将是[1, 2]

使用Python查找环形轨道中最多被访问的区域的程序

因为比赛从扇区1开始。访问扇区的顺序如下:[1,2,3(第一轮结束),4,1(第二轮结束),2(第三轮结束)]。在这里,两个扇区1和2都被访问了两次,它们是最多被访问的扇区。而扇区3和4只被访问1次。

为了解决这个问题,我们需要遵循以下步骤−

  • 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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程