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

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务