两数之和(leetCode-1)
题目如下图:(也可以到leetCode上看完整题目,题号1)
解答方法一:
最简单的方法就是双指针遍历数组.代码如下
- (NSMutableArray *)sumOfTwoNumbers:(NSMutableArray *)array target:(int)target
{
NSMutableArray * resultArray = [[NSMutableArray alloc]init];
for (int i = 0; i < array.count; i ++) //这里其实可以写i< array.cout-1;
{
for (int j = i +1; j < array.count; j ++)
{
if ([array[i] intValue] + [array[j] intValue] == target)
{
resultArray[0] = [NSString stringWithFormat:@"%d",i];
resultArray[1] = [NSString stringWithFormat:@"%d",j];
//题干写了必有且只有一个答案,所以不判断其余情况了
return resultArray;;
}
}
}
return resultArray;
}
一般双指针循环的时间复杂度比较大,我们来算一个上面代码的时间复杂度为:
n+(n-1)+(n-2)+……1, 是一个等差数列,所以根据等差数列求和公式:Sn = n/2 x (1+n), 结果为二分之n的平方,
根据大O渐近表示法;二分之一可以忽略,所以这个方法的时间复杂度为 n的平方.
(PS:大多数的双指针循环时间复杂度都为 n的平方)
这个运行时间比较长,所以不太推荐.