刷題406. Queue Reconstruction by Height

一、題目說明

題目406. Queue Reconstruction by Height,隊列每個元素包括(h,k),其中h是身高,k是身高不低於h的數量,請按照k和h重構隊列。難度是Medium!

二、我的解答

這個題目理論上不難,但是細節不好處理。代碼如下:

class Solution{
	public:
		vector<vector<int>> reconstructQueue(vector<vector<int>>& people){
			vector<vector<int>> res;
			map<int,vector<int> > mapFronts;
			
			for(int i=0;i<people.size();i++){
				mapFronts[people[i][1]].push_back(people[i][0]);
			}
			for(map<int,vector<int>>::iterator iter=mapFronts.begin();iter!=mapFronts.end();iter++){
				//cout<<iter->first<<":";
				vector<int> cur = iter->second;
				sort(cur.begin(),cur.end());
				vector<int> tmp;
				for(int i=0;i<cur.size();i++){
					//cout<<cur[i]<<" ";
					tmp.clear();
					tmp.push_back(cur[i]);
					tmp.push_back(iter->first);
					if(iter->first == 0){
						res.push_back(tmp);
					}else{
						int curH = cur[i];
						int t = 0,num=0;
						int bigNum = iter->first;
						while(t<res.size() && num<bigNum){
							if(res[t][0] >= curH){
								num++;
							}
							t++;
						}
						if(t<res.size()){
							while(t<res.size() && res[t][0] < curH){
								t++;
							}
						}
						if(t==res.size()){
							res.push_back(tmp);
						}else{
							vector<vector<int>>::iterator itTemp;
							itTemp = res.begin();
							itTemp = itTemp + t;
							res.insert(itTemp,tmp);
						}
					}
						
				}
			}
			
			return res;
		}
};

性能如下:

Runtime: 80 ms, faster than 72.71% of C++ online submissions for Queue Reconstruction by Height.
Memory Usage: 14.5 MB, less than 9.52% of C++ online submissions for Queue Reconstruction by Height.

三、優化措施

這個用到map,用到sort排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章