避免使用嵌套的for循环

时间:2016-11-20 08:31:46

标签: arrays for-loop time

我正在解决编码挑战,并且我的代码在由于超时而导致大量输入的测试用例中失败。

我正在使用嵌套的for循环来查找整数数组相对于它们的顺序的最小差异(排序不是一个选项)。 例如:此数组中的最小差异:{20,7,8,2,5}是(7 - 5 = 2)不是(8 - 7 = 1)。

我知道在执行时,使用嵌套for循环是不好的。在这种情况下,我经常搜索使用嵌套for循环的替代方法,但未能找到任何。

有没有办法在不使用嵌套for循环的情况下实现此算法?

1 个答案:

答案 0 :(得分:1)

高效:O(n Log n)

想法是使用排序。以下是步骤。

1)按升序排序数组。如果您使用合并或快速排序,此步骤需要O(n Log n)时间。

2)将差异初始化为无限。此步骤需要O(1)时间。

3)比较排序数组中的所有相邻对并跟踪最小差异。此步骤需要O(n)时间

- (void)setupRegistrationView
{        
    _loadingIndicatorTopConstraintLogin.active = NO;
    _loadingIndicatorTopConstraintRegister.active = YES;
}

- (void)setupLoginView
{        
    _loadingIndicatorTopConstraintLogin.active = YES;
    _loadingIndicatorTopConstraintRegister.active = NO;
}