访谈:找到所有连续数字的范围

时间:2014-11-18 23:01:38

标签: algorithm

给定一个带有一些序列号和一些非序列号的排序数组。编写一个算法,将此数组作为输入,并返回所有连续数字的{start,end}列表。连续数字只有1的差异。

E.g。数组:

[4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 20, 22, 23, 24, 27]

public class Range
{
    private int begin;
    private int end;
    public int begin { get; set; }
    public int end { get; set; }
}

这里的O(n)解决方案似乎很明显,但有没有办法在更短的时间内完成?

1 个答案:

答案 0 :(得分:1)

一种解决方案是一次前面说3个数字并查看它们之间的区别

如果差值等于3,那么它们是连续的,然后向前移动3,直到你发现差值不是3,然后你向后移动一步,如果它是2那么做差异然后结束范围从我们之前有差异的前一个数字开始你的下一个范围。

在最坏的情况下,在根本没有连续数字的情况下,对于大N,我们将迭代n / 3次,这很重要。

编辑:

这种方法的最坏情况是当有两个连续的数字对时,我们需要触及所有数字,因此在特定情况下它将是O(n)。

相关问题