我应该打印钟摆排列的数组。对于某些输出,我的回答是正确的,但对于某些输出是错误的。为什么会这样?
test_case = int(input())
for i in range(0, test_case):
n = int(input())
arr = [int(i) for i in input().split()]
arr.sort()
arr1 = [0] * n
mid = int((n - 1) / 2)
arr1[mid] = arr[0]
i = 1
j = 1
for i in range(1, mid + 1):
arr1[mid + i] = arr[j]
j += 1
arr1[mid - i] = arr[j]
j += 1
if (int(n % 2) == 0):
arr1[mid + i] = arr[j]
print(' '.join(map(str, arr1)))
这里我尝试了 2 个测试用例。对于第一个测试用例,我的输出是正确的,但对于第二个测试用例,一个大小为 8 的数组,我的输出是错误的。
2 #no. of test cases
5 # size of 1st array
4 1 3 2 5 #1st Input
5 3 1 2 4 # correct output
8 #size of 2nd array
539 161 985 856 166 29 726 590 #2nd input
856 590 166 29 161 539 985 0 # Wrong output
第二个测试用例的预期输出是:
856 590 166 29 161 539 726 985
请您参考如下方法:
为什么不只是这个:
lst = [539, 161, 985, 856, 166, 29, 726, 590]
def pendulum(lst):
srt = sorted(lst)
return list(reversed(srt[0::2])) + srt[1::2]
ret = pendulum(lst)
# [856, 590, 166, 29, 161, 539, 726, 985]
对列表进行排序,然后取出所有其他元素并将其组装到新列表中。
请注意,该函数接受列表并返回一个列表;您可能需要先将您的字符串拆分为一个列表 ( lst = [int(i) for i in input().split()] ),您可能希望在最后转换结果: strg = ' '.join(str(i) for i in ret) .
在你的代码中如果n = 8你会得到mid = 3 ; i范围从 1至 3因此 mid+1 <= 6 ;你永远不会设置 arr1[7] - 数组中的最后一个条目将保留为 0如果你输入的长度是偶数。
