在数组中查找连续的整数

时间:2017-01-15 00:29:15

标签: objective-c arrays algorithm

我正在寻找一种算法来确定数组中是否至少有三个连续数字。我找到了几个并稍微调整了一下,但它似乎没有用。以下是我目前正在做的事情。在循环之前使用NSSortDescriptor对数组进行排序。

例如:
在数组[5,6,101,102,103]中,三个连续的数字是[101,102,103]
以下函数应返回YES

int c = [checkArray count];
int a,b = 0;

int cnt = 1;
for (int i = 1; i < c; i++)
{
    a = [[checkArray objectAtIndex:i] intValue];
    b = [[checkArray objectAtIndex:i-1] intValue] - 1;

    if (a == b)
    {
        cnt++;
        if (cnt == 3)
            return YES;
    } else {
        cnt = 1;
    }
}    
return NO;

2 个答案:

答案 0 :(得分:2)

这是另一种方法。我没有测试过,但你应该明白这个想法。

int c = [checkArray count];
int a,b,c = 0;

a = [[checkArray objectAtIndex:0] intValue];
b = [[checkArray objectAtIndex:1] intValue];
for (int i = 2; i < c; i++)
{
    c = [[checkArray objectAtIndex:i] intValue];    
    if (a+2 == b+1 && b+1 == c)
      return YES;
    a = b;
    b = c;
}    
return NO;

它具有易于优化的额外优势。

答案 1 :(得分:1)

你应该可以做类似......

for (int i = 1; i < checkArray.count-1; i++)
{
    int lower = [checkArray[i-1] intValue] +1;
    int mid = [checkArray[i] intValue];
    int upper = [checkArray[i+1] intValue] -1;

    if (lower == mid && mid == upper) {
        return YES;
    }
}    
return NO;

您只需要检查一次号码。无需计算任何东西。您检查的每个数字都是三个数字的中间位置。如果前一个和后一个分别小一个和一个大,则三个数字是连续的。