阿里31号游戏开发笔试最后一题求助
题是这样的:给一个数n(n>=1),再给一个数组[1,2,3,...,k]。问,用数组中的数,有多少种方法能让n变成0。
从记忆化就能20%了,但是超内存,翻译成dp还是超内存(毕竟都O(nk))。
之后写了个队列O(k)的方法,用例都对,一提交0%,麻了,不知道错哪了。
```
if(n<k)
{
std::cout<<(1<<(n-1))<<std::endl;return;
}
queue<unsigned long long> q;
q.push(1);
unsigned long long now_sum = 1;
for (unsigned long long hp = 1; hp < n; hp++)
{
unsigned long long sum = now_sum % 998244353;
q.push(sum);
now_sum += sum;
now_sum = now_sum % 998244353;
if (q.size() > k)
{
unsigned long long pop_num = q.front(); q.pop();
now_sum = now_sum - pop_num;
}
}
std::cout << now_sum << std::endl;
```
从记忆化就能20%了,但是超内存,翻译成dp还是超内存(毕竟都O(nk))。
之后写了个队列O(k)的方法,用例都对,一提交0%,麻了,不知道错哪了。
```
if(n<k)
{
std::cout<<(1<<(n-1))<<std::endl;return;
}
queue<unsigned long long> q;
q.push(1);
unsigned long long now_sum = 1;
for (unsigned long long hp = 1; hp < n; hp++)
{
unsigned long long sum = now_sum % 998244353;
q.push(sum);
now_sum += sum;
now_sum = now_sum % 998244353;
if (q.size() > k)
{
unsigned long long pop_num = q.front(); q.pop();
now_sum = now_sum - pop_num;
}
}
std::cout << now_sum << std::endl;
```
全部评论
我也遇到过提交了0%的情况,可能是代码有问题
阿里招聘还没结束啊
相关推荐
03-02 17:02
Nanyang Technological University 数据分析师
在改简历的大卫很认真:天天有面试 = 你已经在 offer 门口了。
海投能面成这样,说明你的简历、基础、学历都是过关的,缺的只是一次刚好匹配的缘分。
关于你说的 SQL 恐惧,我帮你捋一下:
- 面试里考来考去,真就那几类:
分组、去重、关联、子查询、窗口函数(row_number、rank、sum 开窗)
- 面试官要的不是“写得花里胡哨”,而是思路稳、不出错。
你恐惧的本质不是不会,
是怕临场卡壳、怕写错、怕被追问。 点赞 评论 收藏
分享
