【问题标题】:This logic should find the number of pairs in array with difference d but only the sample test case passes此逻辑应找到数组中具有差异 d 的对数,但只有样本测试用例通过
【发布时间】:2022-01-15 04:04:04
【问题描述】:

对于这个数组(示例测试用例):1 1 2 2 4 6 和 D = 2 差为 D 的对数为 3。 解释: 这里的差 2 对是 (2,4) 和 (4,6)。生成 (2,4) 的方法有 2 种,生成 4,6 的方法有 1 种。输出为 3 (1+2)。 这段代码只通过了这个测试用例,但它没有通过所有其他测试用例(大约 13 个隐藏测试用例)。我需要了解为什么会发生这种情况

int Func_M_2(vector<int> arr,int D)
{
    int counter =0;
    for(int i=0;i<arr.size();i++)
        {
            for(int j=i+1;j<arr.size();j++)
            {
                if(arr[j]-arr[i]==D)
                counter++;
            }
        }
return counter;
}

【问题讨论】:

  • std::abs(arr[j] - arr[i]) == D?
  • 您的代码是否假定数组已排序?这个问题能保证吗?
  • 不,它不认为
  • 你用未排序的数组测试过吗?
  • @Jarod42 相同的输出

标签: c++ algorithm


【解决方案1】:

我可以为您的问题提供解决方案。

#include <iostream>
#include <vector>
using namespace std;
void solve()
{
    int difference=2;
    vector<int> numbers={1, 1, 2, 2, 4, 6};
    vector<int> vectorCount;
    for(int i=0; i<numbers.size(); ++i)
    {
        int count=0;
        for(int j=0; j<numbers.size(); ++j)
        {
            if(numbers[i]-numbers[j]==difference)
            {
                ++count;
            }
        }
        vectorCount.push_back(count);
    }
    int summarize=0;
    for(int i=0; i<vectorCount.size(); ++i)
    {
        summarize+=vectorCount[i];
    }
    cout<<"summarize <- "<<summarize<<endl;
    return;
}
int main()
{
    solve();
    return 0;
}

结果如下:

summarize <- 3

【讨论】:

  • 它应该给出相同的答案
  • 你能解释一下你做了什么改变吗?为什么?只包含代码的答案不是很有帮助
  • @Alan Birtles,满足命令分支if(numbers[i]-numbers[j]==difference) 的所有差异都将添加到参数容器vectorCount 中。之后,必须汇总包含在vectorCount 中的所有数字。
  • 在您的回答中应使用edited 进行澄清
【解决方案2】:

对不起,我无法发表评论,但我认为差异 D 在您的 if() 中也必须是 abs(D):

if( abs(arr[j]-arr[i]) == abs(D) )

【讨论】:

  • 你似乎是唯一注意到 D 可能为负数的人。
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多