GDUT_SD level
获赞
59
粉丝
1
关注
0
看过 TA
5
广东工业大学
2018
Java
IP属地:广东
暂未填写个人简介
私信
关注
2017-08-31 22:15
已编辑
广东工业大学 Java
后台岗。 听说美团主Java,然后选择题好几道是C***的,有些没见过的函数根本看不懂。。感觉选择题做的不是很好 编程贼简单,2AC,等下笔试结束我再发详细思路和代码。 第一题刚开始做的时候只有25%~33%,提示超时(Go和Java都会超时),后续改了算法才AC。。 第二题,很简单,找准限制条件就可以了,O(1)的空间复杂度可以解决。 ----------分割线------------ 下面的解题思路: 第二题简单,先说第二题,直接上代码,思路在注释里,语言是Go: func max(a, b int) int { if...
浮生一梦暗若痴:第一题,代码。因为改了两个版本。所以有点丑。 思路:先求sum[i],表示前i项的和,然后对每个sum[i]模k,那么我们要找的就是模k后的值相同的那些数中相距最远的。 #include <iostream> #include <vector> #include <unordered_map> #include <algorithm> using namespace std; bool cmp(const pair<int,int>& a,const pair<int,int>&b){ if(a.first==b.first){ return a.second < b.second; }else{ return a.first<b.first; } } int main(){ int n; cin>>n; vector<int> a(n+1); vector<int> s(n+1,0); for(int i=1;i<=n;++i){ cin>>a[i]; s[i] = s[i-1] + a[i]; } int k; cin>>k; int res = 0; vector<pair<int,int>> mod(n+1); for(int i=1;i<=n;++i){ mod[i].first = s[i]%k; mod[i].second = i; } sort(mod.begin()+1,mod.end(),cmp); int l = 0; int tem = 0; for(int i=1;i<=n;++i){ if(mod[i].first==tem) continue; else { int tres = mod[i-1].second - mod[l].second; res = max(res,tres); tem = mod[i].first; l = i; } } int tres = mod[n].second - mod[l].second; res = max(res,tres); cout<<res<<endl; }
投递美团等公司6个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务