首页 > 9.6腾讯笔试,后端(中位数真坑啊,心态已崩)
头像
董哥的黑板报
编辑于 2020-09-06 22:18
+ 关注

9.6腾讯笔试,后端(中位数真坑啊,心态已崩)

  • 看了其他大佬都是四五个AC的,这就是差距,我都不好意思发出来,算了,忍不住啊,还是写出来吧
  • 这次笔试比第1次的笔试容易好多,但是时间被第4题白白浪费过去了

  • 第1题:循环遍历,AC 100%
  • 第2题:不难,AC 100%
  • 第3题:我看第4题简单,我就先去做第4题了,结果第4题浪费好多时间,这题没时间做了,这题不难的
  • 第4题:这题不难的,但是写完之后发现不对,中位数?需要排序?不需要排序?我先写不排序的吧,nmd不对啊,那我再写写排序的吧,emmm也不对啊,到底怎么求啊(然后消息提示题目改了),我就刷新页面看了一下,题目不是要求输入的是偶数吗?怎么奇数也行啊,到底怎么求啊,于是在小窗口跟监考官聊了起来,然后回复:已更改,请再次刷新,emmmm...算了吧,洗洗睡了
  • 第5题:温馨提示:距离笔试结束还有5分钟,请......(算了吧,放弃吧,默默关上电脑,今天就到这里吧)


  • 第1题如下
#include <iostream>
#include <vector>

using namespace std;

typedef struct node
{
    int val;
    struct node *pNext;
    node(int _val) : val(_val), pNext(nullptr) { }
}Node;


int main()
{
    std::vector<int> vec;

    int nodeValue;

    // 构造第一条链表
    int n;
    cin >> n;
    Node *list1 = new Node(-1);
    Node *temp1 = list1;
    for(int i = 0; i < n; i++)
    {
        cin >> nodeValue;
        Node *newNode = new Node(nodeValue);

        temp1->pNext = newNode;
        temp1 = temp1->pNext;
    }

    // 构造第二条链表
    int m;
    cin >> m;
    Node *list2 = new Node(-1);
    Node *temp2 = list2;
    for(int i = 0; i < m; i++)
    {
        cin >> nodeValue;
        Node *newNode = new Node(nodeValue);

        temp2->pNext = newNode;
        temp2 = temp2->pNext;
    }

    temp1 = list1->pNext;
    temp2 = list2->pNext;

    while(temp1 != nullptr && temp2 != nullptr)
    {
        // 当temp1的值大于temp2
        while(temp1->val > temp2->val && temp2 != nullptr)
            temp1 = temp1->pNext;
        
        // 如果temp2的值大于temp1
        while(temp2->val > temp1->val && temp2 != nullptr)
            temp2 = temp2->pNext;
        
        // 上面遍历之后temp1->val == temp2->val
        
        // 遍历相同的节点, 然后加入到vec中
        while(temp1 != nullptr && temp2 != nullptr && temp1->val == temp2->val)
        {
            vec.push_back(temp1->val);
            temp1 = temp1->pNext;
            temp2 = temp2->pNext;
        }
    }
    
    for(const auto & elem : vec)
        std::cout << elem << " ";
    

    return 0;
}
  • 第2题如下
#include <iostream>
#include <unordered_set>
#include <queue>

using namespace std;

int main()
{
    // 保存最终的结果
    unordered_set<int> vec;

    // 用来保存可以通知消息的人
    queue<int> _qu;

    int n, m;
    cin >> n >> m;

    // m个组
    unordered_set<int> groups[m];

    int memberNumbers;
    int memberId;

    // 初始化所有组
    for(int i = 0; i < m; ++i)
    {
        cin >> memberNumbers;
        for(int j = 0; j < memberNumbers; ++j)
        {
            cin >> memberId;
            groups[i].insert(memberId);
        }
    }

    // 先把0放进去, 因此0可以通知其他人
    _qu.push(0);
    
    // 只要队列中有人,那么就可以去通知其他人
    while(!_qu.empty())
    {
        // 取出队首元素, 去通知其他人
        int front = _qu.front();
        _qu.pop();

        // 通知完成之后,自己的任务结束了,放入最终的vec中就可以了
        vec.insert(front);

        // 遍历所有的组
        for(int i = 0; i < m; ++i)
        {
            // 如果在这个组中存在front元素, 那就通知整个组
            if(groups[i].find(front) != groups[i].end())
            {
                // 遍历整个组
                for(const auto & elem : groups[i])
                {
                    // 不在vec中才插入
                    if(vec.find(elem) == vec.end())
                    {
                        _qu.push(elem);
                    }
                }
            }
        }
    }

    std::cout << vec.size();

}



全部评论

(8) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐