美团CXX两道ac代码

第一道没想到好方法,暴力n^2过了,大佬轻拍
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main (){
    int N;
    cin>>N;
    vector<int> p(N);
    for(int i=0;i<N;i++) {
        int temp;
        cin>>temp;
        p[i]=temp;
    }
    int K;
    cin>>K;
    vector<int> help(N);
    int sum=0;
    for(int i=0;i<N;i++) {
    	sum += p[i];
        help[i]=sum;
    }
    int ans=0;
    int len=0;
    for(int i=N-1;i>=0;i--){
        if (help[i] % K == 0){
            ans=max(i+1,ans);
            break;
        }
    	for (int j=0;j<i;j++){
        	if ( (help[i]-help[j])%K == 0){
                len=i-j;
                ans=max(ans,len);
                break;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

第二道就不多说了
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> s(n);
    int sum=0;
    int maxs=0;
    for(int i=0;i<n;i++){
    	int temp;
        cin>>temp;
        s[i]=temp;
        sum+=s[i];
        maxs=max(maxs,s[i]);
    }
    if(sum - maxs >= maxs)
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    return 0;
}

全部评论
第一题暴力解法子序列和的部分: 如果每次都重复计算,我会偶尔跑出来92%; 后来我用滑动窗口计算子序列和,AC; 大佬的思路是先用一个数组保存0~i序列的和,这样seq[j]-seq[i]就直接是序列i~j的和了,老哥稳。 其他大佬的O(n)的方法很巧妙,数学原理是a%k == b%k -> a%k - b %k == 0 -> abs(a-b)%k == 0
点赞 回复 分享
发布于 2017-08-31 21:59
用的java,但是第二题只过了40%,只能膜拜大佬了
点赞 回复 分享
发布于 2017-08-31 21:52
第一题暴力O(n2)......83%,优化成O(n)之后变成25%了,还是用暴力吧。。。。
点赞 回复 分享
发布于 2017-08-31 21:58
滑动窗口没学好,该回去补习补习了
点赞 回复 分享
发布于 2017-08-31 22:04

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务