vivo 笔试 c++小白第一题超时,大佬们能不能解答一下?

int solution(int n)
{
int sum=0;
vector<int> v;
for(int i=1; i<=n; i++)
{
int j=i;
while(j--)
{
v.push_back(i);
}
}
for(int i=0; i<n; i++)
sum+=v[i];
cout<<sum<<endl;;
}




重做了

int solution(int n) {
    int sum = 0, day = 1;
    while (n != 0) {
        if (n >= day) {
            sum += day * day;
            n -= day;
        } else {
            sum += day * n;
            n = 0;
        }
        day++;
    }
    return sum;
}

#vivo##笔试题目#
全部评论
我猜应该是,要把结果return回去,你把他打到控制台了?我java的,C++不太懂阿,说错了可不要笑话俺。
1 回复
分享
发布于 2020-03-08 17:00
 #vivo#  你存的数太多了,假设这个n是50,你就得存2500个数,实际上用不上啊,可以直接在第二层循环计数,达到n就直接break到最外层。代码如下
点赞 回复
分享
发布于 2020-03-08 16:57
阿里巴巴
校招火热招聘中
官网直投
 while(j--), 这里在判断下v的长度,超过了就不用继续加了。。他要的是第n天,你这样n+1的也会被加进去。
点赞 回复
分享
发布于 2020-03-08 16:59
为什么要用vector?每次push_back都会耗时啊
点赞 回复
分享
发布于 2020-03-08 17:04
你的return呢。。这种函数式的要返回int,代码没什么问题感觉
点赞 回复
分享
发布于 2020-03-08 17:11
你直接乘i就行了为什么要一个个加起来
点赞 回复
分享
发布于 2020-03-08 18:02

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务