我正在寻找一种算法来确定数组中是否至少有三个连续数字。我找到了几个并稍微调整了一下,但它似乎没有用。以下是我目前正在做的事情。在循环之前使用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;
答案 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;
您只需要检查一次号码。无需计算任何东西。您检查的每个数字都是三个数字的中间位置。如果前一个和后一个分别小一个和一个大,则三个数字是连续的。