我正在用Python进行编程面试,我对这个问题感到困惑。这个问题需要一个数字数组,并且应该输出一个列表,其中偶数是先排序的。您应该在不分配额外存储空间的情况下执行此操作
他们给出了一个解决方案,我对它进行了测试,但没有给出正确的答案
def even_odd(arr):
next_even = 0
next_odd = len(arr) - 1
while next_even < next_odd:
if arr[next_even] % 2 == 0:
next_even += 1
print("next" + str(next_even))
else:
arr[next_even] = arr[next_odd]
arr[next_odd] = arr[next_even]
next_odd -= 1
print(arr)
print("first" + str(arr[next_even]))
return arr
print(even_odd([1, 2, 3, 4, 5, 6]))
结果是[6,2,4,4,5,6] 我也不理解元素之间相互交换的机制(A[下一个偶数],[下一个奇数]=A[下一个奇数],[下一个偶数])。我认为这是一个重要的概念,当你不能创建另一个数组时,你必须交换元素,但我似乎不能把我的头围绕它
有人能帮我解释一下我的代码哪里出错了吗?谢谢
想想这些话:
无论
next_even
和next_odd
的值是什么,结果都是这些索引的值相等。那显然被窃听了。如果将其改为交换,则该算法将起作用:最后,在Python中,只使用排序而不分配额外的存储应该是更容易的方法。简单地说:
交换可以通过这样做(或类似操作)来完成
这是干什么的
假设我们有一个数组=
[1,2,3,4]
如果我们执行类似
array[0], array[1] = array[1], array[0]
的操作,我们就是在“交换”这些数组值因此,生成的数组将是
[2,1,3,4]
。这是因为array[0]
在array[1]
处被赋值,而array[1]
在array[0]
处被赋值我们为什么需要它
这有效地节省了执行交换所需的临时变量。如果我们尝试进行交换而不使用上述语法,则会得到如下结果:
因此,我们需要一个临时值来保存我们正在“交换”的值
您的代码已更新
您在交换时没有检查下一个奇数索引处的元素是偶数还是奇数。如果下一个奇数处的元素是奇数,只需将索引向左移动即可
相关问题 更多 >
编程相关推荐