N
的元素的列表A,范围为1 to N
。数组中可能没有所有元素。如果该元素不存在,则数组中将存在-1
。重新排列数组,以使A[i] = i
出现,并且如果我不存在,则在该位置显示-1
。
我在python 3中的代码
l= list(map(int, input().split()))
p=sorted(l)
j=[z for z in range(p[0],p[-1]+1)]
for i in range(1,p[-1]):
if i is not j:
for d in range(p[-1]):
j[d]=-1
print(' '.join(map(str,p)))
这是输入和预期的输出:
input: 4 7 -1 9 -1 5 3 -1 -1 -1
expected output: -1 -1 -1 3 4 5 -1 7 -1 9
输出获取:
-1 -1 -1 -1 -1 3 4 5 7 9
请让我知道我在做什么错?
答案 0 :(得分:0)
有一个更简单的方法:
让
l = [int(i) for i in "4 7 -1 9 -1 5 3 -1 -1 -1".split()]
l # input
Out:
[4, 7, -1, 9, -1, 5, 3, -1, -1, -1]
创建一个包含-1
,长度为len(l)
的列表:
p = [-1] * len(l)
p
Out:
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
如果l
中的元素不是p
,则遍历l
并将值分配给-1
:
for i in l:
if i != -1:
p[i] = i
p
Out:
[-1, -1, -1, 3, 4, 5, -1, 7, -1, 9]
这是一种更快的解决方案,因为在列表i
中没有搜索元素j
,并且可以提供所需的输出。
修改: 作为功能:
l= list(map(int, input().split()))
def rearrange(l):
p = [-1] * len(l)
for i in l:
if i != -1:
p[i] = i
return p