偶数位置处奇数和偶数元素的奇数元素

时间:2012-10-31 21:00:04

标签: algorithm

这是在一次采访中提出的问题。请提出一些看法。 给定一个包含所有正整数的数组。你必须以这样的方式排列元素,即奇数元素处于奇数位置,偶数元素处于偶数位置。

PS。没有额外的空间。 O(N)解决方案

5 个答案:

答案 0 :(得分:20)

迭代偶数位置,直到找到奇数。迭代奇数位置,直到找到并偶数(使用不同的索引)。交换两个数字,然后重复。

答案 1 :(得分:1)

您是否允许将阵列的大小加倍?否则,这个问题没有意义。为什么?!?假设你得到一个充满奇数的数组,你能想到任何解决方案吗?不,没有。

所以,我假设您可以将数组的大小加倍。然后对于任何i,将i元素(a(i))放入位置2 * i或2 * i + 1,这取决于a(i)是偶数还是奇数。

答案 2 :(得分:0)

两个新的数组OddArray和EvenArray与给定数组的大小相同。遍历给定的数组并继续将所有奇数发送到OddArray并保持奇数位置,偶数为EvenArray,将数字保持在偶数位置。

效率为O(n),额外内存为2n,其中n为原始数组的大小。

答案 3 :(得分:0)

b.c.test.com

答案 4 :(得分:0)

//Putting even number on even position and odd number on odd position
package com.learnJava;

public class ArrangeArray {

    private int [] array={2,5,7,8,1,6,9};
    private int len=array.length;
    public static void main(String [] args)
    {
        ArrangeArray a=new ArrangeArray();
        a.print();
        a.arrange();
        a.print();

    }
    public  void print()
    {
        for(int i=0;i<array.length;i++)
        {
            System.out.print(array[i] + " ");

        }
        System.out.println();
    }
    public void arrange()
    {
        int oddinx=1;
        int evenidx=0;
        while(true)
        {
            while(evenidx<len && array[evenidx]%2==0)
            {
                evenidx+=2;
            }
            while(oddinx<len && array[oddinx]%2==1)
            {
                oddinx+=2;
            }
            if (evenidx < len && oddinx < len)
                swap (evenidx, oddinx);
            else
                break;

        }

    }
    public void swap(int a,int b)
    {
        int tmp=array[b];
        array[b]=array[a];
        array[a]=tmp;
    }
}