数组里是否有两个数之和等于某个数
1个回答
展开全部
[算法C++]
检测数组里是否有两个数之和等于某个数
解决方法一:先将数组排序,然后从两头开始遍历
数组排序后,从左端开始取最小值,从右端取最大值,
判断两者之和与目标的大小:
1. 等于时,输出两个数;
2. 大于时,右端移到第2个数,继续判断;
3. 小于时,左端移到第2个数,继续判断。
#include
#include
#include
using namespace std;
void fun1(int a[], int length, int target) {
// 给数组排序
sort(a, a + length);
// left是最小值,right是最大值
int left = 0, right = length - 1;
while (left < right) {
int tmp = a[left] + a[right];
if (tmp == target) {
cout << a[left] << a[right] << endl;
return;
}
else if (tmp > target) { // 和比目标大,就减小right,从而减小和
right--;
}
else { // 和比目标小,就增大left,从而增大和
left++;
}
}
cout << 无 << endl;
}
int main() {
int a[] = {
1, 3, 2, 7, 6, 9, 8, 0, 5, 4
};
int target = 0;
while (cin >> target) {
fun1(a, 10, target);
}
}
检测数组里是否有两个数之和等于某个数
解决方法一:先将数组排序,然后从两头开始遍历
数组排序后,从左端开始取最小值,从右端取最大值,
判断两者之和与目标的大小:
1. 等于时,输出两个数;
2. 大于时,右端移到第2个数,继续判断;
3. 小于时,左端移到第2个数,继续判断。
#include
#include
#include
using namespace std;
void fun1(int a[], int length, int target) {
// 给数组排序
sort(a, a + length);
// left是最小值,right是最大值
int left = 0, right = length - 1;
while (left < right) {
int tmp = a[left] + a[right];
if (tmp == target) {
cout << a[left] << a[right] << endl;
return;
}
else if (tmp > target) { // 和比目标大,就减小right,从而减小和
right--;
}
else { // 和比目标小,就增大left,从而增大和
left++;
}
}
cout << 无 << endl;
}
int main() {
int a[] = {
1, 3, 2, 7, 6, 9, 8, 0, 5, 4
};
int target = 0;
while (cin >> target) {
fun1(a, 10, target);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询