检测数组中重复的数字序列

时间:2015-03-18 13:38:28

标签: python arrays algorithm sequence

我认为这很容易,但坦率地说不是。

给出一些像这样的列表:

([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];

我不知道是否要运行循环来检查这个并搜索模式重复的子列表,直到在较小的循环中违规;

我想到的一个逻辑是:

  1. 如果数字不在看到的地图中,请添加到带索引位置的地图/字典;
  2. 否则找到最先检测到它的阵列中的最后一个位置,并将下一个位置与最后一个位置进行比较+ i [i = 1..n直到第一个检测到的数字不再重复或下一个数字!=下一个上一个号码的号码]
  3. 增加所有检测到的数字位置。

0 个答案:

没有答案