米哈游--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%,不太清楚為什么,代碼較長就不貼了,感興趣的可以到我的倉庫去看,歡迎指教。代碼鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM