问题如下-
给定一个整数数组作为输入,返回一个数组,该数组包含与输入数组中相同的数字,但重新排列,以便所有偶数在前面,奇数在后面。请注意,应保持偶数和奇数的顺序,即如果偶数 n1
在输入中出现在偶数 n2
之前,则在输出数组中n1
应该出现在 n2
之前。奇数也是如此。另请注意,在此问题中,您不应创建任何新数组。
到目前为止所做的如下,但我无法获得预期的输出。
public class MoveEvenToFront {
static int[] testcase1 = {3, 5, 4, 6, 8, 9, 7, 10};
public static void main(String[] args) {
MoveEvenToFront testInstance = new MoveEvenToFront();
int[] result = testInstance.moveEvenToFront(testcase1);
System.out.print("{");
for (int i = 0; i < result.length; i++) {
if (i > 0) {
System.out.print(",");
}
System.out.print(result[i]);
}
System.out.print("}");
}
public int[] moveEvenToFront(int[] arr) {
int temp = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] % 2 != 0) {
temp = arr[i - 1];
arr[i - 1] = arr[i];
arr[i] = temp;
}
}
return arr;
}
}
测试用例 {1,2,3,4,5,6,7,8,10,12}
的预期输出是 {2,4,6,8,10 ,12,1,3,5,7}
.
最佳答案
你的算法是错误的。您正在检查 arr[i-1]
是否为偶数并将其与 arr[i]
交换。如果 arr[i]
也是奇数,那么您就不会检查它,即使它是奇数,它也会移到前面。
你可以做的是
- 找到数组中的第一个偶数并将其与第一个索引交换并递增索引。
- 然后找到第二个偶数并将其与第二个索引交换,继续直到数组结束。
如下所示更改方法:
public int[] moveEvenToFront(int[] arr){
int temp=0;
int a=0;
for(int i=0;i<arr.length;i++){
if(arr[i]%2==0){
for (int j=i;j>a;j--){
temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
a++;
}
}
return arr;
}
关于java - 如何将所有偶数移动到数组的前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22810806/