输入一个整数数组与一个整数,在数组中查找和为该整数的所有整数对.
方法:排序夹逼:数组有序,直接由俩个指针分别从头和尾向中间扫描的方法,时间复杂度是O(n),空间复杂度是O(1)。总的时间复杂度(o(nlgn+n) = o(nlgn))。这里用到c语言的qsort()。
c代码如下:
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string.h>
-
void findsum(int *a,int n,int sum)
-
{
-
int begin = 0,end = n-1;
-
while (begin < end)
-
{
-
int cursum = a[begin]+a[end];
-
if (cursum == sum)
-
{
-
printf("%d %d\n",a[begin],a[end]);
-
//continue;
-
begin++;
-
end--;
-
}
-
else if (cursum > sum)
-
{
-
end--;
-
}
-
else
-
{
-
begin++;
-
}
-
}
-
}
-
int cmp ( const void *a , const void *b )
-
-
{ return *(int *)a - *(int *)b; }
-
-
//qsort(num,100,sizeof(num[0]),cmp);
-
int main()
-
{
-
printf("请输入数组长度:");
-
int len = 0;
-
scanf("%d",&len);
-
int a[len];
-
memset(a,0,len);
-
int i = 0;
-
for (i = 0;i < len;i++)
-
{
-
printf("请输入第%d个元素:",i+1);
-
scanf("%d",&a[i]);
-
}
-
qsort(a,len,sizeof(a[0]),cmp);
-
int sum = 0;
-
printf("请输入定植sum:");
-
scanf("%d",&sum);
-
findsum(a,len,sum);
-
return 0;
-
}
执行结果如下(centos5.5)
[root@localhost c++]# ./findsum
请输入数组长度:10
请输入第1个元素:4
请输入第2个元素:3
请输入第3个元素:2
请输入第4个元素:1
请输入第5个元素:5
请输入第6个元素:4
请输入第7个元素:3
请输入第8个元素:3
请输入第9个元素:2
请输入第10个元素:1
请输入定植sum:5
1 4
1 4
2 3
2 3
[root@localhost c++]#
阅读(689) | 评论(0) | 转发(0) |