Java 重新排列整数队列
我正在尝试编写一个方法,可以将整数队列从偶数重新排列为奇数 使[3,5,4,17,6,83,1,84,16,37]类似于[4,6,84,16,3,5,17,83,1,37] 但是我现在有点困了,有人能帮我吗。这是我到目前为止得到的Java 重新排列整数队列,java,stack,queue,Java,Stack,Queue,我正在尝试编写一个方法,可以将整数队列从偶数重新排列为奇数 使[3,5,4,17,6,83,1,84,16,37]类似于[4,6,84,16,3,5,17,83,1,37] 但是我现在有点困了,有人能帮我吗。这是我到目前为止得到的 public void rearrange(Queue<Integer> q) { Stack<Integer> s = new Stack<Integer>(); int size = q.size(); for
public void rearrange(Queue<Integer> q) {
Stack<Integer> s = new Stack<Integer>();
int size = q.size();
for (int i = 0; i < size; i++) {
int n = q.remove();
if (n % 2 == 1 || n % 2 == -1) {
q.add(n);
}
if( n % 2 == 0) {
q.add(n);
}
}
}
public void重排(队列q){
堆栈s=新堆栈();
int size=q.size();
对于(int i=0;i
Java有比较器
,正好用于这类事情。将它们放入java.util.List
中。编写一个比较器,类似于:
class OddEvenComparator implements Comparator<Integer> {
public int compare (Integer a, Integer b) {
boolean aOdd = (a % 2) != 0;
boolean bOdd = (b % 2) != 0;
return aOdd == bOdd ? a.compareTo(b) : aOdd ? -1 : 1;
}
}
类比较器实现比较器{
公共整数比较(整数a、整数b){
布尔aOdd=(a%2)!=0;
布尔bOdd=(b%2)!=0;
返回aOdd==bOdd?a。与(b)相比:aOdd?-1:1;
}
}
所以
- 如果它们都是奇数或偶数,则在值上进行比较
- 如果a是奇数而b不是,则其位置向后移动
- 如果a为偶数,b为非偶数,则其位置向前移动
使用
Collections.sort(列表,new OddEvenComparator())
进行排序。创建临时队列(或列表)。在主队列上迭代,删除奇数元素并将它们放入临时队列。最后,将所有列表元素添加到主队列中排序是可以的,但这需要O(n logn)时间,而在O(n)中这样做非常容易。我认为这也是Evgeniy Dorofev提出的:
public static void rearrange(Queue<Integer> q) {
Queue<Integer> tmp = new LinkedList<>();
// Remember size and rearrange that many items.
int size = q.size();
for (int count = 0; count < size; count++) {
Integer head = q.poll();
// Even items go on the end of the original queue, odd to temp.
(head % 2 == 0 ? q : tmp).offer(head);
}
// Glue temp queue of odd values onto original which is all even.
q.addAll(tmp);
}
公共静态无效重排(队列q){
队列tmp=newlinkedlist();
//记住大小并重新排列许多项目。
int size=q.size();
对于(int count=0;count
我认为你的方法行不通;与使用单个帮助器堆栈不同,我认为您需要使用两个帮助器队列(一个用于保存偶数值,一个用于保存奇数值)。补充/更正:由于您事先检查队列大小,并基于此进行迭代,而不是基于队列是否为非空,因此您可以将队列本身用作“帮助器队列”之一我在先前的评论中提到。使用这种方法,您可以用堆栈替换另一个助手队列,前提是您愿意将整个操作运行两次(以便元素以正确的顺序结束)。所以,如果您愿意,您实际上可以使用一个助手堆栈来完成这项工作:这只是一种痛苦。