Python中的新年混乱挑战

时间:2019-09-19 19:09:49

标签: python arrays

我正在努力应对这一挑战:New Year Chaos Challenge。我已经走了很远,并且意识到我的代码不适用于所有测试用例,通常用于较大的输入

我知道我编写了错误的代码,但这是我将学习的方法。所以这是我的算法:

1. Take i = len(a)-1
2. Check whether the last element is at place or not a[i] not equals len(a)(which is anyway the nth element)
3. Find how far it is from it's actual place
4. If the value is more than 2, then Chaotic and exit
5. Else if the value is positive, which means the guy has to move to the right and bribe would be taken into consideration, else not valuable
6. Add the number of value the element has
7. Swap the values using normal swapping 
8. Print the statement according to the situation 

我的代码:

def minimumBribes(a):
  min_bribe = 0
  isChaotic = False
  i = len(a)-1
  #for chaos check
  while i >= 0:
    posVal = 0
    if a[i] != len(a):
      #if the value comes more than two with respect to any position then chaotic
      posVal = i - a.index(i+1)
      if abs(posVal) > 2:
        isChaotic = True
        break
      elif posVal > 0:
        min_bribe += posVal
        #swapping them to their place original place
        temp = i+1
        a[a.index(i+1)] = a[i]
        a[i] = temp

     i -= 1
    print("Too Chaotic" if isChaotic else min_bribe-1, end="")

因此对于某些测试用例,我的算法可以正常运行,如:

1. [2 1 5 3 4]
2. [2 5 1 3 4]
3. [5 1 2 3 7 8 6 4]
4. [1 2 5 3 7 8 6 4]

错误陷入了以下一种测试案例: Input

预期输出: 966,但我的代码未通过该代码运行。花了很多时间。

我的算法失败:

  
      
  1. 大量输入所消耗的时间
  2.   
  3. 空间消耗
  4.   

任何会告诉我的帮助:

  
      
  1. 有效的代码来解决或纠正我的代码
  2.   
  3. 您如何看待该解决方案,以及达到该水平需要我什么。
  4.   

我是一个学习者,我会学习。那些能真正流畅地编写代码并具有出色逻辑的人们对我着迷。请也指导我。谢谢:)

1 个答案:

答案 0 :(得分:-2)

导入数学 导入操作系统 随机导入 进口重新 导入系统

完成下面的 minimumBribes 函数。

定义最小贿赂(q): q = [i-1 for i in q] # 设置队列从 0 开始

bribes = 0



for i, o in enumerate(q):

    cur = i 

    if o - cur > 2:

        print("Too chaotic")

        return

    for k in q[max(o - 1, 0):i]:

        if k > o:

            bribes += 1


print(bribes)

if name == 'ma​​in': t = int(input())

for t_itr in range(t):
    n = int(input())
    q = list(map(int, input().rstrip().split()))

    print(minimumBribes(q))