java - 如何将所有偶数移动到数组的前面?

标签 java arrays

问题如下-

给定一个整数数组作为输入,返回一个数组,该数组包含与输入数组中相同的数字,但重新排列,以便所有偶数在前面,奇数在后面。请注意,应保持偶数和奇数的顺序,即如果偶数 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/

相关文章:

java - 如何找到内存泄漏的根源?

java - 非法参数异常 : Could not parse [/24] - SubnetUtils

java - Java 中的位 & (AND) 是如何工作的?

Java 数组分级

java - 如何在showMessageDialog中打印双二维数组?

java - 尝试在导航标题部分添加横幅广告后应用程序崩溃

java - 始终具有固定长度字符串的实用程序类?

python - 字符串列表到整数数组

javascript - 输入分数并计算平均值

c - 在 C 中使用大数组时出现 EXCEPTION_ACCESS_VIOLATION