《Cracking the Coding Interview程式設計師面試金典》----貓狗收容所

塵封的記憶0發表於2017-05-02
時間限制:3秒 空間限制:32768K 熱度指數:1535
本題知識點:  佇列
 演算法知識視訊講解

題目描述

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

       給定一個操作序列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;  
    }
};


不懂的可以加我的QQ群:261035036(IT程式設計師面試寶典

群) 歡迎你到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章