Google 面试问题:求数组中一对数字的和? 有没有更好的方法来解决呢? 我觉得我遗漏了问题的一部分。这个解决方案有问题吗?
#include <iostream>
using namespace std;
int main()
{
int give[5] = {7, 6, 7, 4, 6};
int snum = 12;
for(int i = 0; i<sizeof(give); i++)
{
for(int j = 1; j<sizeof(give); j++)
{
if(give[i] + give[j] == snum && give[i] == give[j] && i != j)
{
cout << "The numbers are " << give[i] << " and " << give[j] << endl;
cout << "The indices are " << i << " & " << j << endl;
return 0;
}
}
}
cout << "no numbers where found. " << endl;
}
您的代码尝试在
give
数组中查找加起来等于指定值 snum
的一对数字。虽然您的代码确实尝试解决问题,但仍有一些问题和可以改进:
sizeof的问题:
sizeof
运算符返回数组的大小(以字节为单位),而不是数组中元素的数量。因此,sizeof(give)
将返回 20(5 个整数乘以 4 个字节),这不是您想要的。相反,使用 sizeof(give) / sizeof(give[0])
来获取数组中的元素数量。
嵌套循环范围:嵌套循环应从 0 到
sizeof(give) - 1
(或等效地,从 0 到数组中元素的数量减 1),以正确迭代数组的元素。
冗余检查:您正在检查循环内的
give[i]
是否等于give[j]
。这可能会导致打印冗余对。例如,如果数组中有两个 6,它将多次打印该对 (6, 6)。
这是代码的改进版本:
#include <iostream>
using namespace std;
int main()
{
int give[] = {7, 6, 7, 4, 6};
int snum = 12;
int n = sizeof(give) / sizeof(give[0]); // Calculate the number of elements in the array
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n; j++) // Start the inner loop from i + 1 to avoid redundant pairs
{
if(give[i] + give[j] == snum)
{
cout << "The numbers are " << give[i] << " and " << give[j] << endl;
cout << "The indices are " << i << " & " << j << endl;
return 0;
}
}
}
cout << "No numbers were found." << endl;
}