【发布时间】:2023-04-08 14:15:01
【问题描述】:
我试图在 Hackerrank 中解决一个问题。我通过了所有示例测试用例,但由于“超过时间限制”错误,无法通过所有隐藏测试用例。 问题问题的链接是:Fraudulent-activity notification
我的代码如下。
#include <bits/stdc++.h>
using namespace std;
vector<string> split_string(string);
// Complete the activityNotifications function below.
int activityNotifications(vector<int> v, long int d) {
long int n,ex;
long double m;
long int cap=v.size();
long int notif=0;
n=d;
for(long int i=0;i<n&&n<cap;i++,n++)
{
ex=v[n];
sort(v.begin()+i, v.begin()+i+d);
if(d%2==0)
{
m=(v[(n+i-1)/2]+v[(n+i)/2])/2.0;
}
else
{
m=v[(n+i)/2];
}
if((m*2)>=ex)
{
notif++;
}
}
return (notif-1);
}
int main()
{
vector<int>v;
long int n,d;
long int item;
cin>>n>>d;
for(long int i=0;i<n;i++)
{
cin>>item;
v.push_back(item);
}
int res=activityNotifications(v,d);
cout<<res;
return 0;
}
如何优化此代码? 请帮忙。
【问题讨论】:
-
你用的是什么输入法?
-
@tadman 示例输入:9 5 2 3 4 2 3 6 8 4 5 其中 9 是数组大小,5 是数组元素剩余的尾随天数。输出:2
-
在尝试优化时,您必须始终关注算法。在这里,您在每个步骤中对数组进行排序,而您知道该数组已经在上一步中排序,并且您只是删除了一项并添加了一项新的。恕我直言,关键在这里。
-
好吧,就我理解你的代码而言,它无论如何都不会被接受。对于以下示例(5 3 10 5 1 9 9),您的代码将返回 1,但必须为 0
标签: c++ algorithm optimization vector stl