我认为这很容易,但坦率地说不是。
给出一些像这样的列表:
([15,3,15,3, 15, 40])
([15,15,3,15,15,40])
([6,3,5,17,19,15,13,15,6,3,5,3])
如果检测到第一个序列的模式,那么输出列表应该递增每个数字位置,如下所示:
[15,3,15,3, 15, 40] => [0,0,1,2, 0,0]
[15,15,3,15,15,40] => [0,0,0,1,2,0]
基本上,输入列表的大小有一个输出列表。查看每个数字,当检测到序列重复时,计数器将递增一次,从0开始并继续递增直到模式结束。如果序列再次重复,计数器将进一步递增。
我尝试了一些代码,但它没有解决这个问题。
例如, [15,3,15,3,15,40],它 存储未见的数字。 由于在索引2,15重复,它检查索引[2 + 1] ==索引[0 + 1] 如果是这样增加到1并移动到下一个数字。现在索引[3 + 1]!= [1 + 1]和索引[3 + 1]与检测到条件的当前第一个数字相同(在这种情况下,索引[2]已经被覆盖。因此,最后一个重复数是3,增量是2,因此得到[0,0,1,2,0,0];
我不知道是否要运行循环来检查这个并搜索模式重复的子列表,直到在较小的循环中违规;
我想到的一个逻辑是: