求和等于X
一个长度为N的整型数组A[1,...,N],给定整数X,请设计一个时间复杂度不超过O(nlog2n)的算法
思路:
先对数组进行排序(快排O(nlogn)),然后分别从数组的小端和大端开始查找:
若A[i]+A[j]>X,i++;
若A[i]+A[j]<X,j--;
若A[i]+A[j]==X,i++,j--;
直到i>j;
代码实现:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 7 int main() 8 { 9 int a[100]; 10 int n; 11 printf("%请输入数组的个数:\n"); 12 scanf("%d",&n); 13 int x; 14 printf("请输入一个任意整数:\n"); 15 scanf("%d",&x); 16 printf("请输入数组元素:\n"); 17 for(int i=0;i<n;i++) 18 scanf("%d",&a[i]); 19 sort(a,a+n); 20 for(int i=0,j=n-1;i<=j;) 21 { 22 if(a[i]+a[j]<x) 23 i++; 24 else if(a[i]+a[j]>x) 25 j--; 26 else if(a[i]+a[j]==x) 27 { 28 printf("%d+%d=%d\n",a[i],a[j],x); 29 i++; 30 j--; 31 } 32 } 33 return 0; 34 }

浙公网安备 33010602011771号