伪代码找到数组中最长的运行

时间:2012-08-22 15:26:52

标签: pseudocode

我知道A run是一系列相邻的重复值,你如何编写伪代码来计算数组中最长运行的长度,例如。

5将是这个整数数组中运行时间最长的。

1 2 4 4 3 1 2 4 3 5 5 5 5 3 6 5 5 6 3 1

任何想法都会有所帮助。

4 个答案:

答案 0 :(得分:11)

def longest_run(array):
  result = None
  prev = None
  size = 0
  max_size = 0
  for element in array:
    if (element == prev):
      size += 1
      if size > max_size:
        result = element
        max_size = size
    else:
      size = 0
    prev = element
  return result

修改

哇。哇哇!这个伪代码实际上正在工作:

>>> longest_run([1,2,4,4,3,1,2,4,3,5,5,5,5,3,6,5,5,6,3,1])
5

答案 1 :(得分:2)

max_run_length = 0;
current_run_length = 0;
loop through the array storing the current index value, and the previous index's value 
  if the value is the same as the previous one, current_run_length++;
  otherwise {
    if current_run_length > max_run_length : max_run_length = current_run_length
    current_run_length = 1;
  }

答案 2 :(得分:0)

这里有一个不同的Python函数方法(Python看起来像Pseudocode)。此代码仅适用于Python 3.3+。否则你必须更换" return"用"提高StopIteration"。

我使用生成器来生成元素数量和元素本身的元组。它更普遍。您也可以将此用于无限序列。如果你想从序列中获得最长的重复元素,它必须是一个有限的序列。

def group_same(iterable):
    iterator = iter(iterable)
    last = next(iterator)
    counter = 1
    while True:
        try:
            element = next(iterator)
            if element is last:
                counter += 1
                continue
            else:
                yield (counter, last)
                counter = 1
                last = element
        except StopIteration:
            yield (counter, last)
            return

如果您有这样的列表:

li = [0, 0, 2, 1, 1, 1, 1, 1, 5, 5, 6, 7, 7, 7, 12, 'Text', 'Text', 'Text2']

然后你可以制作一个新的清单:

list(group_same(li))

然后您将获得一个新列表:

[(2, 0),
 (1, 2),
 (5, 1),
 (2, 5),
 (1, 6),
 (3, 7),
 (1, 12),
 (2, 'Text'),
 (1, 'Text2')]

要获得最长的重复元素,可以使用max函数。

gen = group_same(li) # Generator, does nothing until iterating over it
grouped_elements = list(gen) # iterate over the generator until it's exhausted
longest = max(grouped_elements, key=lambda x: x[0])

或作为一个班轮:

max(list(group_same(li)), key=lambda x: x[0])

函数max为我们提供了列表中最大的元素。在这种情况下,列表包含多个元素。参数键仅用于将元组的第一个元素作为最大值,但您仍然会返回元组。

In : max(list(group_same(li)), key=lambda x: x[0])
Out: (5, 1)

元素1重复出现5次。

答案 3 :(得分:0)

int main()
{
    int a[20] = {1, 2, 4, 4, 3, 1, 2, 4, 3, 5, 5, 5, 5, 3, 6, 5, 5, 6, 3, 1};
    int c=0;
    for (int i=0;i<19;i++)
    {
        if (a[i] == a[i+1])
        {
            if (i != (i+1))
            {
                c++;
            }
        }
    }
    cout << c-1;
    return 0;
}