【问题标题】:Could someone point out the error in my logic. (Coding Exercise)有人可以指出我逻辑中的错误。 (编码练习)
【发布时间】:2021-06-15 02:23:03
【问题描述】:

所以这是来自 HackerRank 网站的问题。我已经尽了最大努力,但我终其一生都无法弄清楚我做错了什么。问题如下:

“这是元旦,人们排队乘坐仙境过山车。每个人都戴着一个贴纸,表明他们在队列中的初始位置,从1n。任何人都可以直接贿赂前面的人他们中的一些人交换了位置,但他们仍然戴着原来的贴纸。一个人最多可以贿赂另外两个人。

确定为达到给定队列顺序而发生的最低贿赂次数。打印贿赂的数量,或者,如果有人贿赂了两个以上的人,打印Too chaotic。”

这是我的尝试:

def minimumBribes(q):
    bribes = 0
    sorted_q  = sorted(q)
    total_moves = 0
    for i in range(len(q)):
        origin = sorted_q[i]
        current = q[i]
        moved = current - origin
        if moved > 0:
            if moved > 2:
                print("Too chaotic")
                return
            else:
                total_moves += moved
    print(total_moves)

我意识到这有点罗嗦,但我想让我的逻辑尽可能清晰。

如果我输入q = [1,2,5,3,7,8,6,4],预期的输出是7,但我得到6

为什么!

【问题讨论】:

  • 我刚刚看到有人已经在hackerrank new year chaos code optimization 中发布了这个问题的解决方案,但我更想知道为什么我的解决方案不起作用。
  • 如果你手写这个,你会发现 6 也必须贿赂 4。它们不仅不合适,而且不正常 (6>4)。
  • 所以你的意思是简单地拿当前位置和原位置之间的差,我错过了贿赂?
  • 对。 6 和 4 不按顺序排列的事实意味着一定有贿赂,但我还没有想出量化的方法来确定这一点。
  • 啊,我现在明白了。 5 右边有 2 个小数,7 右边有 2 个小数,8 右边有 2 个小数,6 右边有 1 个小数。那就是 7。跨度>

标签: python logic


【解决方案1】:

q=[1,2,5,3,7,8,6,4]

正如您在问题中看到的那样,没有贿赂的顺序是提到可以贿赂 2 一次或一次 1 人

如果你被某人贿赂,你不能贿赂是没有限制的

让我们反转孔的过程并像“q”中那样创建这种情况

'''

   sorted_q=[1,2,3,4,5,6,7,8]
   5 bribed 3 and 4 
   total_moved = 2
   
   sorted_q=[1,2,5,3,4,6,7,8]
   7 bribed 4 and 6 
   total_moved = 4
    
   sorted_q=[1,2,5,3,7,4,6,8]
   8 bribed 4 and 6
   total_moved = 6

   sorted_q=[1,2,5,3,7,8,4,6]
   here at this bribe by 6 to 4 just make your logic fail
   total_moved = 7
   

   sorted_q=[1,2,5,3,7,8,6,4]
    

'''

【讨论】:

  • 是的,但问题是,如何在给定结束位置的情况下解决这个问题?你真的没有回答这个问题。
  • 是的,我认为他错了,我认为他会观察并找到新的解决方案stackoverflow.com/questions/38797194/…t
  • 因为有解决方案,所以我只告诉了他出错的部分
猜你喜欢
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多