【发布时间】:2018-06-13 15:50:21
【问题描述】:
给定两个(可能未排序的)数组,
A和B以及交换元素A[i]和B[i]的操作swap(A, B, i),您需要返回最小交换次数,因此这两个数组是严格增加(或-1,如果不可能)
我很快就想出了一个贪婪的解决方案(如果你愿意,我可以附上代码),但显然在某些情况下它不会产生正确的答案(我不知道)。
为什么贪婪的方法不够好? 达到最少掉期数量的替代方法是什么?
编辑:
这是我的代码
def solution(A, B):
n = len(A)
swaps = 0
for i in range(1, n):
if A[i] > A[i - 1] and B[i] > B[i - 1]:
continue
if A[i] < A[i - 1] and B[i] < B[i - 1]:
return -1
elif A[i] < A[i - 1]:
if B[i - 1] < A[i]:
A[i], B[i] = B[i], A[i]
swaps += 1
else:
return -1
else:
# B[i] < B[i - 1]
if A[i - 1] < B[i]:
A[i], B[i] = B[i], A[i]
swaps += 1
else:
return -1
return swaps
# test
assert(solution([5, 3, 7, 7, 10], [1, 6, 6, 9, 9]))
【问题讨论】:
-
“为什么贪婪的方法不够好?”不知道你用了什么贪婪的方法,我们怎么知道
-
添加你尝试过的代码
-
@juvian,你是对的。我附上代码
-
@Elimination 您是否在在线网站上发布此内容?你知道 A 和 B 总是有相同的长度吗?
-
@juvian,是的,很抱歉没有提及。 A 和 B 的长度相同
标签: algorithm data-structures computer-science