【问题标题】:C++ Array manipulationC++ 数组操作
【发布时间】:2021-03-16 07:45:03
【问题描述】:

大家好,这是来自hackerrank的问题链接 hackerrank problem

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    long int sizeArr, operation;
    cin>>sizeArr>>operation;
    long int array[sizeArr];
    for(long int i=0;i<sizeArr;i++)
        array[i]=0;
    for(long int i=0;i<operation;i++)
    {
        long int a,b,k;
        cin>>a>>b>>k;
        for(long int j=a-1;j<=b-1;j++)
            array[j]+=k;
    }
    sort(array,array+sizeArr);
    cout<<array[sizeArr-1];
}

我是这样编码的,另一个人是这样编码的

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    long int N,M,a,b,k,i,j,max=0,x=0;
    cin>>N>>M;
    long int *Arr = new long int[N+1]();
    for(i=0;i<M;i++)
    {
        cin>>a>>b>>k;
        Arr[a]+=k;            
        if((b+1)<=N) Arr[b+1]-=k;
    }
    for(i=1;i<=N;i++)
    {
       x=x+Arr[i];
       if(max<x) max=x;

    }
    cout<<max;
    return 0;
}

我的第一个没有清除所有测试用例,但第二个的代码清除了。任何建议。

【问题讨论】:

  • 你的代码是错误的,另一个产生正确的输出?你有什么问题?
  • 首先使用 VLA 扩展(所以没有标准 C++),其次泄漏内存...
  • 请注意,其他代码效率更高:O(n + op),如果 op 是操作数。您可能有时间限制问题

标签: c++ arrays data-structures stl iteration


【解决方案1】:

问题是你的同事有这个if((b+1)&lt;=N) Arr[b+1]-=k;,这意味着他有时会减去但在你的代码中,你只在这里添加array[j]+=k;
而且您的 while 函数的范围也比您的同事更大(例如,如果用户给出 a=1 和 b=3,您会经历 0,1,2,但您的同事只会进入 1 和 3。我不确定这是问题所在,但您应该检查一下。

【讨论】:

  • 减法只是减少操作次数的技巧。看问题陈述,那里只有补充
  • 如果这是我的代码需要一些时间来执行的问题,但它应该提供所需的结果。但它不会。
猜你喜欢
  • 2013-03-24
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2012-03-25
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多