zoukankan      html  css  js  c++  java
  • 米哈游--2020春招实习

    笔试

    米哈游是我前阵子春招补录才投的(应该是有大佬毁约了),之前不会C++所以没敢投,因为是补录所以应该是没有多少hc了,就抱着做套真题不亏的心态投递了,前几天才做完笔试所以印象还比较深刻。

    同样是在牛客网笔试,需要录屏 + 手机公众号监控,两个小时,选择填空 + 2道编程 + 附加题(根据你投递的方向选择),编程题可以使用本地IDE。

    选择都是不定向选择,各种内容都覆盖到了,感觉还是挺难的。

    编程第一题:求同时存在的公告的最大数量

    先输入一个n,代表公告的数量,然后循环输入这n个公告的开始时间和结束时间(左闭右开),然后计算公告最多能同时存在几个。比如公告1:[1, 6), 公告2: [2, 7), 则[2, 5]这段时间内有两个公告同时存在,所以输出2。

    以下是我的AC代码,我想得比较简单,就是对起始时间数组和结束时间数组排序后,用一个类似扫描线的指针从左到右扫描过去,这个画图比较好理解,由于进行了排序,所以时间复杂度是O(nlogn),借助了两个辅助数组,空间复杂度O(n),应该有更好的解法,不过由于时间原因我没有想。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
    	vector<int> start, end;
    	int num;
    	int max_num = 0;
    	cin >> num;
    	while (num--)
    	{
    		int a, b;
    		cin >> a >> b;
    		start.push_back(a);
    		end.push_back(b);
    	}
    	sort(start.begin(), start.end());
    	sort(end.begin(), end.end());
    	//从头开始遍历start数组,遇到一个就+1,比较end数组,小于等于则-1,end索引前进,下一个start
    	int end_index = 0;
    	for (int i = 0; i < start.size(); i++)
    	{
    		max_num++;
    		if (start[i] >= end[end_index])
    		{
    			end_index++;
    			max_num--;
    		}
    	}
    	cout << max_num << endl;
    }
    

    编程第二题:解析字符串

    输入a-d表示abcd,X-a表示XYZa,a-b2表示abab,a2就是aa,然后给你一串字符串比如a-d2ac2a2X-z,让你输出出现频率最高的字母,不区分大小写,A和a算同一个,然后如果频率相同,优先输出字母小的,考察的是有限状态自动机和ASCII码,剑指offer面试题20很类似,但因为本题涉及了ASCII码的操作,较为繁琐一点。

    我是用了C++的map来存储每个字母对应出现次数,然后针对不同的序列组合情况写了三个解析函数(后面发现可以通过默认参数缩减为两个)

    这题本是一道不难的题,只是代码较多,细节较多,导致我debug的时间过长,后面的附加题也来不及做了。最后也只过了40%,不太清楚为什么,代码较长就不贴了,感兴趣的可以到我的仓库去看,欢迎指教。代码链接

  • 相关阅读:
    安卓系统
    移动互联网产品设计的原则
    Java 笔记10
    Get Android Source Code
    Spinner Animation
    Java 笔记09
    Java 笔记07
    Java 笔记08
    例题
    例题
  • 原文地址:https://www.cnblogs.com/VisionWongBlog/p/13141702.html
Copyright © 2011-2022 走看看