美好的一天,例如:如果我有一个nsarray [3,1,5,3,3,5,0,1,1,3] 如何计算数组中的缺失数字: -4 -3 -2 -1 2 但是 - 不允许排序,必须以线性时间O(N)
运行答案 0 :(得分:2)
蛮力的方式就是这样的
一个。找到数组-5,3
中的最大值和最小值湾循环多次数组形式-5到3寻找具体数字(-5,-4,-3,-2,-1,0 .... 3)
B1。如果找到的数字打破了那个循环并继续下一个
b2。如果循环结束而没有破坏,请注意该数字
与仅对其进行排序相比,它效率低下,但它以线性方式运行
答案 1 :(得分:1)
这个想法是制作另一个bool数组,并检查是否存在该数字。在你这样做之后,只需要经历一系列bool,如果number为false,那么它就会丢失。
答案 2 :(得分:1)
使用此代码
NSArray *a = @[@3, @1, @-5, @3, @3, @-5, @0, @1, @1, @3];
NSNumber *max=[a valueForKeyPath:@"@max.self"];
NSNumber *min=[a valueForKeyPath:@"@min.self"];
int big = [max intValue];
int small = [min intValue];
while (small<=big) {
if ([a containsObject:[NSNumber numberWithInt:small]]) {
}
else
{
NSLog(@"missing number is %d",small);
}
small++;
}
result
答案 3 :(得分:0)
如果数组中的数字是连续的整数,那么&#39;排序&#39;数组并找到两个连续数字之间的差异。如果是1,则不会错过该号码。此外,这个数字已经错过了。