Solution1:普通思路
普通思路就挺好的
class CatDogAsylum {
public:
vector<int> asylum(vector<vector<int> > ope) {
// write code here
vector<int> dog, cat, res;
if(ope.size() == 0 || ope[0].size() == 0)
return res;
for(int i = 0; i < ope.size(); i++) {
if(ope[i][0] == 1) { //来了新动物
Insert(dog, cat, ope[i][1]);
}
else if(ope[i][0] == 2) { //有人要来收养动物
int temp = Find(dog, cat, ope[i][1]);
if(temp != 0)
res.push_back(temp);
}
}
return res;
}
//把猫或狗加入收养所
void Insert(vector<int> &dog, vector<int> &cat, int symbol) { //symbol为正:新加入了狗;为负:新加入了猫
if(symbol > 0) {
dog.push_back(symbol);
cat.push_back(0);
}
else if(symbol < 0) {
cat.push_back(symbol);
dog.push_back(0);
}
return;
}
//从收养所里找猫或狗
int Find(vector<int> &dog, vector<int> &cat, int symbol) { //symbol = 0:收养最早的动物
int res = 0; //symbol == 1:收养狗;symbol == -1:收养猫
int n = dog.size(); //dog和cat的size()相等
if(symbol == 0) {
for(int i = 0; i < n; i++) {
if(dog[i] != 0 || cat[i] != 0) {
if(dog[i] != 0) {
res = dog[i];
dog[i] = 0;
return res;
}
else if(cat[i] != 0) {
res = cat[i];
cat[i] = 0;
return res;
}
}
}
return res;
}
else if(symbol == 1) {
for(int i = 0; i < n; i++) {
if(dog[i] != 0) {
res = dog[i];
dog[i] = 0;
return res;
}
}
return res;
}
else if(symbol == -1) {
for(int i = 0; i < n; i++) {
if(cat[i] != 0) {
res = cat[i];
cat[i] = 0;
return res;
}
}
return res;
}
return res; //返回值:正数是狗,负数是猫,0代表忽略此次领养操作
}
};