『プログラマ面接金典』猫犬収容所


【声明:著作権所有、転載は出所を明記してください。商業用途に使用しないでください。 連絡先:[email protected]テーマリンク:http://www.nowcoder.com/practice/6235a76b1e404f748f7c820583125c50?rp=1&ru=/ta/cracking-the-coding-the-Contrview&ql=/ta/cracking-the-coding-interview/questiongテーマ家の動物収容所が猫と犬だけを収容していることを描いていますが、特殊な飼育規則があります。この種の動物を引き取って収容所に入るのが一番早いです。動作シーケンスを指定します。int[][2]ope(C++の中でvector)はすべてのイベントを表します。第一の要素が1なら、動物が収容所に入ることを表し、第二の要素は動物の番号、整数は犬を表し、負は猫を表します。最初の要素が2であれば、動物を飼う人がいます。第二の要素が0であれば、第一の引き取り方をします。1であれば、犬を飼うことを指定します。-1であれば、猫を飼うことを指定します。養子縁組のシーケンスを順番に返してください。合法的でない操作があったら、養子縁組の要求に合う動物がいないと、今度の養子縁組を無視します。テストサンプル:[[1,1],[1,-1],[2,0],[2,-1]]の戻り:[1,-1]の考え方を2つの列ですべての操作を完了します。最初の操作に対しては、列の最初の要素に戻ります。2番目の操作に対しては、必要でないデータを補助キューに保存します。最初の条件を満たす要素を見つけたら削除します。次に、補助キューのすべての要素をキュー
class CatDogAsylum
{
    public:
        vector<int> asylum(vector<vector<int> > ope)
        {
            // write code here
            vector<int> ans;
            int len = ope.size();
            if(len==0)
                return ans;
            queue<int> Q1;
            queue<int> Q2;
            for(int i = 0; i<len; i++)
            {
                if(ope[i][0]==1)
                {
                    Q1.push(ope[i][1]);
                }
                else
                {
                    if(ope[i][1]==0)
                    {
                        if(!Q1.empty())
                        {
                            ans.push_back(Q1.front());
                            Q1.pop();
                        }
                    }
                    else
                    {
                        while(!Q1.empty())
                        {
                            if(ope[i][1]<0 && Q1.front()<0)
                            {
                                ans.push_back(Q1.front());
                                Q1.pop();
                                break;
                            }
                            else if(ope[i][1]>0 && Q1.front()>0)
                            {
                                ans.push_back(Q1.front());
                                Q1.pop();
                                break;
                            }
                            else
                            {
                                Q2.push(Q1.front());
                                Q1.pop();
                            }
                        }
                        while(!Q1.empty())
                        {
                            Q2.push(Q1.front());
                            Q1.pop();
                        }
                        while(!Q2.empty())
                        {
                            Q1.push(Q2.front());
                            Q2.pop();
                        }
                    }
                }
            }
            return ans;
        }
};
に戻す。