加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:19:06 所属栏目:Java 来源:网络整理
导读:以下是问题 – 给定一个整数数组作为输入,返回一个包含与输入数组中相同数字的数组,但重新排列,以便所有偶数都在前面,而赔率数在后面.注意,应该保持偶数和奇数的顺序,即如果在输入中出现偶数n2之前的偶数n1,那么在输出数组n1中应该出现在n2之前.奇数也是如此
以下是问题 –

给定一个整数数组作为输入,返回一个包含与输入数组中相同数字的数组,但重新排列,以便所有偶数都在前面,而赔率数在后面.注意,应该保持偶数和奇数的顺序,即如果在输入中出现偶数n2之前的偶数n1,那么在输出数组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,10,12}的预期输出是{2,12,1,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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读