4.10 拼多多笔试第一题

第一道题我自测怎么都能通过,可是提交只有20%,求个大佬帮我看看,第一次笔试,真的感觉自己好菜

#include<bits/stdc++.h>
using namespace std;

int main() { 
    int n;
    cin >> n;
    int color;

    vector<int> arr;
    set<int> set;
    while(n--) {
        cin >> color;
        arr.emplace_back(color);
        if(set.count(color)==0) set.insert(color);
    }
    // 处理数据
    vector<vector<int>> res;

    for(auto i = set.begin(); i != set.end(); i++){
        int interval = 0;
        int temp = 0;
        int count = 0;
        int error = 0;
        int pre = 0;
        for(int j = 0; j < arr.size(); j++) {
            if(arr[j] == *i) {
                count++;
                // 说明是第一个
                if(count == 1) {
                    pre = j;
                }
                else if (count == 2) {
                    interval = j - pre;
                }
                else {
                    if(j - pre != interval) {
                        error = 1;
                        break;
                    }
                pre = j;
                }
            }
        }
        if(error == 0) {
            vector<int> temp1 = {*i, interval};
            res.emplace_back(temp1);
        }
    }

    cout << res.size()<<endl;
    sort(res.begin(), res.end(),[](const vector<int>& a,vector<int> &b){
       return a[0] < b[0]; 
    });

    for(auto a : res) {
        for(auto b : a) {
            cout << b << ' ';
        }
        cout << endl;
    }
}
#拼多多笔试##笔试题目##拼多多#
全部评论
思路不太对,按颜色分桶vector<vector<int>>,然后分别计算每个桶是不是等差数列即可
1 回复
分享
发布于 2022-04-10 21:38

相关推荐

投递腾讯等公司8个岗位
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务