360笔试第二题AC解法

直接上代码,正好优化到 800ms 将将AC,如果代码有什么优化的可能,或者有了更好的思路欢迎评论

如果想看第一题的思路和第二题的思路,可以看我写的博客2020届360秋招笔试编程题

由于是想要输出加和最大的数字,那么第一位的可能性就是从 M - 10,需要从中选出最大的那个.此时问题就会退化成一个 twosum ,从 M - 10 遍历,优先获得高的.

其实解题思路很简单,就是贪心,最最关键的是如何减少运算中的计算量.

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int main() {
    int N, M; cin >> N >> M;
    unordered_map<int, int> nums1, nums2;
    vector<int> sum(M, 0);
    int tmp;
    for(int i = 0; i < N; ++i){
        cin >> tmp;
        ++nums1[tmp];
    }
    for(int i = 0; i < N; ++i){
        cin >> tmp;
        ++nums2[tmp];
    }
    int lr, mr;
    for(int i = M - 1; i >= 0; --i){
        auto nit1 = nums1.begin();
        while(nit1 != nums1.end()){
            lr = i - nit1->first;
            mr = M + i - nit1->first;
            if(nums2.find(lr) != nums2.end()){
                if(nums2[lr] <= nit1->second){
                    tmp = nums2[lr];
                    nums2.erase(lr);
                }else{
                    tmp = nit1->second;
                    nums2[lr] -= tmp;
                }
                nit1->second -= tmp;
                sum[i] += tmp;
            }
            if(nums2.find(mr) != nums2.end()){
                if(nums2[mr] <= nit1->second){
                    tmp = nums2[mr];
                    nums2.erase(mr);
                }else{
                    tmp = nit1->second;
                    nums2[mr] -= tmp;
                }
                nit1->second -= tmp;
                sum[i] += tmp;
            }
            if(nit1->second == 0){
                nums1.erase(nit1++);
            }else{
                ++nit1;
            }
        }
    }
    for(int i = M - 1; i >= 0; --i){
        for(int j = 0; j < sum[i]; ++j){
            cout << i << ' ';
        }
    }
    cout << endl;
    return 0;
}
#360公司##笔试题目#
全部评论

相关推荐

点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
评论
4
29
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务