思路
M1=>入队-出队(队列法),一次遍历,将单数入队列A,将双数入队列B,然后再次遍历A出队完毕后再B出队,出队的元素对array重新赋值。
M2=> 双遍历,有序赋值,首先创建一个大小与array一样的数组,通过第一次遍历array,将arrya种的单数赋值给tempArray,再次遍历array将双数赋值给tempArray。
结果
M1=>
运行时间:392ms
占用内存:25644KB
M2=>
运行时间:399ms
占用内存:25056KB
代码
M1=> public int[] reOrderArray(int[] array) { ArrayDeque<Integer> singleNum = new ArrayDeque<>(); ArrayDeque<Integer> doubleNum = new ArrayDeque<>(); for (int i = 0; i < array.length; i++) { if (array[i] %2 == 0) doubleNum.addLast(array[i]); else singleNum.addLast(array[i]); } for (int i = 0; i < array.length; i++) { if (!singleNum.isEmpty()) array[i] = singleNum.pollFirst(); else array[i] = doubleNum.pollFirst(); } System.out.println(Arrays.toString(array)); return array; } M2=> public int[] reOrderArray(int[] array) { int[] tempArray = new int[array.length]; int currentIndex = 0; for (int i : array) { if (i % 2 != 0) tempArray[currentIndex++] = i; } for (int i : array) { if (i % 2 == 0) tempArray[currentIndex++] = i; } System.out.println(Arrays.toString(tempArray)); return tempArray; }