Objective c 在数组中查找连续整数

Objective c 在数组中查找连续整数,objective-c,arrays,algorithm,Objective C,Arrays,Algorithm,我正在寻找一种算法来确定数组中是否至少有三个连续的数字。我已经找到了一些,并对它们进行了一些调整,但它似乎不起作用。下面是我目前正在做的事情。在循环之前,使用NSSortDescriptor对数组进行排序 例如: 在数组[5,610102103]中,三个连续的数字是[101102103] 下面的函数应该返回YES int c = [checkArray count]; int a,b = 0; int cnt = 1; for (int i = 1; i < c; i++) {

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

例如:
在数组[5,610102103]中,三个连续的数字是[101102103]
下面的函数应该返回
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;
int c=[checkArray count];
int a,b=0;
int-cnt=1;
for(int i=1;i
您应该能够执行以下操作:

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;
for(int i=1;i

您只需检查每个号码一次。什么都不用数。您检查的每个数字都是三个数字的中间。如果前面的一个和后面的一个分别小一个和大一个,那么这三个数字是连续的。

您应该能够执行以下操作

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;
for(int i=1;i

您只需检查每个号码一次。什么都不用数。您检查的每个数字都是三个数字的中间。如果前面的数字和后面的数字分别小一和大一,则这三个数字是连续的。

这是另一种方法。我还没有测试过,但你应该知道

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;
int c=[checkArray count];
int a,b,c=0;
a=[[checkArray objectAtIndex:0]intValue];
b=[[checkArray objectAtIndex:1]intValue];
for(int i=2;i

它的另一个优点是易于优化。

这是一种替代方法。我还没有测试过,但你应该知道

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;
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
是计数和第三个值。
c
是计数和第三个值。