不知道这是不是最好的标题。下面是对这个程序应该做什么的解释,我的版本只适用于第一个例子,但是在第二个例子中它不起作用,例如1 1 3 1 2,因为我找不出一个好的方法来处理如此多的变化,特别是当K大于3并且限制为50时。我的版本:
N, K, M = map(int, input().split())
niz = list(map(int, input().split()))
nizk = list(range(1, K+1))
izlazi = []
for r in range(0, M):
operacija = list(map(int, input().split()))
index = 0
if operacija[0] == 2:
nizkk = []
for z in range(0, len(nizk)):
if nizk[z] in niz:
continue
else:
izlazi.append(-1)
break
for p in range(0, N):
if niz[p] not in nizkk:
nizkk.append(niz[p])
nizkk.sort()
if nizkk == nizk:
index = p
izlazi.append(index+1)
break
else:
continue
else:
index, repl = map(int, operacija[1:])
niz[index - 1] = repl
print(izlazi)
在输入的第一行中应该有N,K,M(1<;=N,M<;=100k,1<;=K<;=50,您不需要实际检查,测试的数字总是在这些范围内)。在输入的第二行中,您列出了一个数字列表,它是您先前输入的N的长度。M是您将在以下输入行中执行的操作数。可以有2个操作。如果输入1 p v(p=要替换的数字的索引,v是替换的数字),或者如果输入2,则需要在第2行中输入的数字列表中查找由范围(1,K+1)定义的最短数字数组,并且可能会使用操作1进行更改。如果它不存在,它应该输出-1如果它存在,它应该输出数组中的数字长度(如果你在寻找1,2,3,数字可以像2,1,3,如果你在寻找1,2,3等等,你有2,1,1,3作为最短的一个是解决方案,它的长度是4)。此外,替换操作不从0开始计数,而是从1开始计数。所以在管理列表时要小心。你知道吗
我有以下想法:
最小长度序列要么从第一个元素开始,要么不包含第一个元素,因此等于没有第一个元素的同一序列的最小长度。
所以这里有递归。
对于序列[1,1,3,2,1,1]和[1,2,3],我们有:
距起始元素[1,1,3,2,1,1]的最小长度为4
从起始元素开始的最小长度\uuuuu1,3,2,1,1]是3
从起始元素开始的最小长度为3
从起始元素开始的最小长度为-1
可以在这里停下来。
[4,3,3]=3时结果最小
如果零件从第一个元素开始,则已经实现了最小长度的零件。现在需要将其提取为函数并创建递归函数。你知道吗
一些元代码:
不幸的是,我不懂python,但我可以提供F#上的代码,以备您需要。你知道吗
编辑:
试试这个:
相关问题 更多 >
编程相关推荐