貓狗收容所

題目描述

有家動物收容所只收留貓和狗,但有特殊的收養規則,收養人有兩種收養方式,第一種爲直接收養所有動物中最早進入收容所的,第二種爲選擇收養的動物類型(貓或狗),並收養該種動物中最早進入收容所的。

給定一個操作序列int[][2] ope(C++中爲vector<vector<int>>)代表所有事件。若第一個元素爲1,則代表有動物進入收容所,第二個元素爲動物的編號,整數代表狗,負數代表貓;若第一個元素爲2,則代表有人收養動物,第二個元素若爲0,則採取第一種收養方式,若爲1,則指定收養狗,若爲-1則指定收養貓。請按順序返回收養的序列。若出現不合法的操作,即沒有可以符合領養要求的動物,則將這次領養操作忽略。

測試樣例:
[[1,1],[1,-1],[2,0],[2,-1]]

返回:[1,-1]

class CatDogAsylum {
public:
	vector<int> asylum(vector<vector<int> > ope)
	{
		vector<int>result;int flag;
		int len=ope.size();
		for(int i=0;i<len;i++)
		{
			if(ope[i][0]==2)
			{
				flag=0;
				if(ope[i][1]==0)//按照第一種方式選動物;
				{
					for(int j=0;j<i&&flag==0;j++)
					{
						if(ope[j][0]==1)//最早的動物;
						{
							result.push_back(ope[j][1]);
							ope[j][0]=-1;//表示已經選過;
							flag=1;
						}
					}
				}
				else  if (ope[i][1]==1)//取第一個狗;
				{
					for(int j=0;j<i&&flag==0;j++)
					{
						if(ope[j][0]==1&&ope[j][1]>=0)
						{
							result.push_back(ope[j][1]);
							ope[j][0]=-1;//表示已經選過;
							flag=1;
						}
					}

				}
				else//取第一個貓;
				{
					for(int j=0;j<i&&flag==0;j++)
					{
						if(ope[j][0]==1&&ope[j][1]<0)
						{
							result.push_back(ope[j][1]);
							ope[j][0]=-1;//表示已經選過;
							flag=1;
						}
					}
				}
			}
		}
		return result;
	}
};


發佈了41 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章