牛客网 在线编程 猫狗收容所
生活随笔
收集整理的這篇文章主要介紹了
牛客网 在线编程 猫狗收容所
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
? ? ? ??有家動物收容所只收留貓和狗,但有特殊的收養規則,收養人有兩種收養方式,第一種為直接收養所有動物中最早進入收容所的,第二種為選擇收養的動物類型(貓或狗),并收養該種動物中最早進入收容所的。
? ? ? ?給定一個操作序列int[][2]?ope(C++中為vector<vector<int>>)代表所有事件。若第一個元素為1,則代表有動物進入收容所,第二個元素為動物的編號,正數代表狗,負數代表貓;若第一個元素為2,則代表有人收養動物,第二個元素若為0,則采取第一種收養方式,若為1,則指定收養狗,若為-1則指定收養貓。請按順序返回收養的序列。若出現不合法的操作,即沒有可以符合領養要求的動物,則將這次領養操作忽略。
測試樣例:
[[1,1],[1,-1],[2,0],[2,-1]] 返回:[1,-1]代碼可以簡化一下,不過時間復雜度上就這樣了。
import java.util.*;public class CatDogAsylum {public static ArrayList<Integer> asylum(int[][] ope) {Queue<Integer[]> cat = new LinkedList<>();Queue<Integer[]> dog = new LinkedList<>();ArrayList<Integer> asylum = new ArrayList<>();for (int i = 0; i < ope.length; i++) {if (ope[i][0] == 1) {if (ope[i][1] > 0)dog.offer(new Integer[] { i, ope[i][1] });if (ope[i][1] < 0)cat.offer(new Integer[] { i, ope[i][1] });} else if (ope[i][0] == 2) {if (ope[i][1] == 0) {if (cat.isEmpty()) {asylum.add(dog.poll()[1]);} else if (dog.isEmpty()) {asylum.add(cat.poll()[1]);} else if (dog.peek()[0] > cat.peek()[0]) {asylum.add(cat.poll()[1]);} else if (dog.peek()[0] < cat.peek()[0]) {asylum.add(dog.poll()[1]);}} else if (ope[i][1] == 1 && !dog.isEmpty()) {asylum.add(dog.poll()[1]);} else if (ope[i][1] == -1 && !cat.isEmpty()) {asylum.add(cat.poll()[1]);}continue;}}return asylum;} }?
總結
以上是生活随笔為你收集整理的牛客网 在线编程 猫狗收容所的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019阿里应届内推编程题
- 下一篇: 牛客网 在线编程 之字形矩阵打印