最少交换次数python_对数组进行冒泡排序所需的最小交换次数是多少?

我正在尝试解决Hackerrank问题New Year Chaos:

2981f434-22d7-466e-8d2e-96a06970e8ad.png

可以在页面上找到进一步的说明 . 例如,将'swapped'队列表示为 q ,如果 q = [2, 1, 5, 3, 4] ,那么所需的交换次数为3:

00f4f2be-a4f9-456c-bbf9-526973742402.png

#!/bin/python

import sys

T = int(raw_input().strip())

for a0 in xrange(T):

n = int(raw_input().strip())

q = map(int,raw_input().strip().split(' '))

# your code goes here

diff = [x - y for x, y in zip(q, range(1,n+1))]

if any([abs(el) > 2 for el in diff]):

print "Too chaotic"

else:

all_pairs = [(q[i], q[j]) for i in range(n) for j in range(i+1, n)]

inversions = [pair[0] > pair[1] for pair in all_pairs]

print inversions.count(True)

这是在本地运行的代码版本:

n = 5

q = [2, 1, 5, 3, 4]

diff = [x - y for x, y in zip(q, range(1,n+1))]

if any([abs(el) > 2 for el in diff]):

print "Too chaotic"

else:

all_pairs = [(q[i], q[j]) for i in range(n) for j in range(i+1, n)]

inversion_or_not = [pair[0] > pair[1] for pair in all_pairs]

print inversion_or_not.count(True)

对于给定的测试用例,脚本正确打印数字3.但是,对于所有其他“隐藏”测试用例,它给出了错误的答案:

fac23154-259b-4447-9b13-81257711245b.png

我也试过一个实现冒泡排序的提交:

#!/bin/python

import sys

def swaps_bubble_sort(q):

q = list(q) # Make a shallow copy

swaps = 0

swapped = True

while swapped:

swapped = False

for i in range(n-1):

if q[i] > q[i+1]:

q[i], q[i+1] = q[i+1], q[i]

swaps += 1

swapped = True

return swaps

T = int(raw_input().strip())

for a0 in xrange(T):

n = int(raw_input().strip())

q = map(int,raw_input().strip().split(' '))

# your code goes here

diff = [x - y for x, y in zip(q, range(1,n+1))]

if any([abs(el) > 2 for el in diff]):

print "Too chaotic"

else:

print swaps_bubble_sort(q)

但是相同(失败)的结果 . 互换的最小数量是否不等于反转次数或通过冒泡排序获得的数量?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值