腾讯笔试 90 100 0 100 40,求3,5题的解法

第一题

只需看0 到 n-11 有没有8即可,看别的帖,只通过90%好像是因为题目测试用例本身有错误

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

int main() {
    int t = 0;
    cin >> t;
    for (int i = 0; i < t; i++) {
        int n = 0;
        cin >> n;
        string s;
        cin >> s;
        bool valid = false;

        for (int j = 0; j <= n - 11; j++) {
            if (s[j] == '8') {
                valid = true;
                break;
            }
        }
        if (valid) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}

第二题

整个排序,然后每次两两取首尾求和,求最大值
一开始直接一个vector存所有的延时时间,结果提交发现超内存了。
所以还是直接存 x, y, 然后再遍历

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

int main() {

    int n = 0;
    cin >> n;
    vector<pair<int, int>> delay(n);
    int total = 0;
    for (int i = 0; i < n; i++) {
        cin >> delay[i].first >> delay[i].second;
        total += delay[i].first;
    }
    auto cmp = [](const pair<int, int>& x, const pair<int, int>& y) {
        return x.second < y.second;
    };
    sort(delay.begin(), delay.end(), cmp);
    int minCost = 0;
    int i = 0;
    int j = delay.size() - 1;
    int count = 0;
    while (count < total) {
        if (delay[i].first == 0) {
            i++;
        }
        if (delay[j].first == 0) {
            j--;
        }
        minCost = max(minCost, delay[i].second + delay[j].second);
        delay[i].first--;
        delay[j].first--;
        count += 2;
    }
    cout << minCost << endl;
    return 0;
}

第四题

只要记录每次输出x的和sumX,然后与sumX相等的数直接略过就可以了,我用了小根堆,实际上直接vector存,然后排序,再遍历就可以了

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

int main() {
    int n = 0;
    int k = 0;
    cin >> n >> k;
    priority_queue<int, vector<int>, greater<int>> minHeap;
    for (int i = 0; i < n; i++) {
        int number = 0;
        cin >> number;
        minHeap.push(number);
    }
    int sumX = 0;
    for (int i = 0; i < k; i++) {
        while (!minHeap.empty() && minHeap.top() == sumX) {
            minHeap.pop();
        }
        if (minHeap.empty()) {
            cout << 0 << endl;
        } else {
            cout << minHeap.top() - sumX << endl;
            sumX = minHeap.top();
        }    
    }
    return 0;
}

第五题

完全暴力解的,过了40%

感觉腾讯的题还算友好吧,毕竟这是我这么多笔试以来做的最好的一次了。。。

求第三题、第五题解法

#笔试题目##腾讯#
全部评论
第三题01背包
点赞 回复
分享
发布于 2019-09-20 22:44
先来个容量sum/2的01背包,如果分组后人数差超过1,就把人数多的那一组最小的人调到人数少的那一组,直到人数差小于等于1。
点赞 回复
分享
发布于 2019-09-21 01:28
联想
校招火热招聘中
官网直投
第一题我一开始也是90,后来什么也没改,点了几次就通过了
点赞 回复
分享
发布于 2019-09-20 22:51
第一题输入不要用string,会有问题。 要用下面的 vector<char> s(n); for(int i = 0; i < n; I++){     cin >> s[i]; }
点赞 回复
分享
发布于 2019-09-20 22:52
请问下,这是什么岗的题呢?
点赞 回复
分享
发布于 2019-09-20 23:23
腾讯笔试太迷了
点赞 回复
分享
发布于 2019-09-21 00:06
第五题 我用暴力 然后就全过了😂
点赞 回复
分享
发布于 2019-09-21 00:48
第一题要考虑k=0的情况
点赞 回复
分享
发布于 2019-09-21 07:51
第五题,为什么我暴力只有 20%
点赞 回复
分享
发布于 2019-09-21 08:48
双重约束01背包,装满限制,过了80%
点赞 回复
分享
发布于 2019-09-21 09:54
第一题只有60,求大佬给我看看这个是什么病症  public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int size = in.nextInt();                  for(int i = 0;i < size;i++){             int num = in.nextInt();             String phone = in.next();             if(num < 11){                 System.out.println("NO");                 continue;             }else{                 for(int j = 0;j < (num-10);j++){                     char here = phone.charAt(j);                     System.out.println(here);                     if(here == '-'){                         j++;                         here = phone.charAt(j);                     }                     if(here == '8'){                         System.out.println("YES");                         continue;                     }                                          if(j == (num-11)){                         System.out.println("NO");                         break;                     }                 }             }                      }     }
点赞 回复
分享
发布于 2019-09-21 10:34
第二题一开始我也是直接vector存所有的延时时间,然后提示内存超出限制,看你下面存在delay里,有什么区别吗🤣
点赞 回复
分享
发布于 2019-09-21 20:22

相关推荐

1 16 评论
分享
牛客网
牛客企业服务