有人可以查看我的解决方案吗?谷歌面试

问题描述 投票:0回答:1

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;
}
c++ review
1个回答
0
投票

您的代码尝试在

give
数组中查找加起来等于指定值
snum
的一对数字。虽然您的代码确实尝试解决问题,但仍有一些问题和可以改进:

  1. sizeof的问题:

    sizeof
    运算符返回数组的大小(以字节为单位),而不是数组中元素的数量。因此,
    sizeof(give)
    将返回 20(5 个整数乘以 4 个字节),这不是您想要的。相反,使用
    sizeof(give) / sizeof(give[0])
    来获取数组中的元素数量。

  2. 嵌套循环范围:嵌套循环应从 0 到

    sizeof(give) - 1
    (或等效地,从 0 到数组中元素的数量减 1),以正确迭代数组的元素。

  3. 冗余检查:您正在检查循环内的

    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;
}
© www.soinside.com 2019 - 2024. All rights reserved.