本文主要是介绍程序员面试金典:双栈排序、猫狗收容所,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.双栈排序
题目描述
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。
[1,2,3,4,5]
返回:[5,4,3,2,1]
//感觉这道题很金典,想了好久没想出来,最后看牛客网牛油回答的。
import java.util.*;public class TwoStacks {public ArrayList<Integer> twoStacksSort(int[] numbers) {ArrayList<Integer> list=new ArrayList<Integer>();Stack<Integer> s1=new Stack<Integer>();Stack<Integer> s2=new Stack<Integer>();if(numbers==null||numbers.length==0) return null;for(int i=0;i<numbers.length;i++){s1.push(numbers[i]);}while(!s1.isEmpty()){int top=s1.pop();while(!s2.isEmpty()&&s2.peek()>top){s1.push(s2.pop());}s2.push(top);}while(!s2.isEmpty()){list.add(s2.pop());}return list;}
}
import java.util.*;public class TwoStacks {public ArrayList<Integer> twoStacksSort(int[] numbers) {Arrays.sort(numbers);ArrayList<Integer> list=new ArrayList<Integer>();for(int i=numbers.length-1;i>=0;i--){list.add(numbers[i]);}return list;}
}
2.猫狗收容所
题目描述
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。
给定一个操作序列int[][2] ope(C++中为vector<vector<int>>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为2,则代表有人收养动物,第二个元素若为0,则采取第一种收养方式,若为1,则指定收养狗,若为-1则指定收养猫。请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。
[[1,1],[1,-1],[2,0],[2,-1]]
返回:[1,-1]
这篇关于程序员面试金典:双栈排序、猫狗收容所的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!