• RSS
  • Facebook
  • Twitter

Knowledge is Power.

  • Who you are ?

    Working on machines without understanding them ? Then you should be here..

  • Where you are ?

    Geographical location should not become a barrier to Share our knowledge.

  • What do you do ?

    Puzzles and Interview question are intended to be discussed here.

    Thursday, February 25, 2010

    You are given an Array of N size. It contains 0 and 1 only. You have to arrange all 0s before all 1s (In the program you can’t travel more than once. Minimum complexity desired).

    Idea : Move a pointer left, from the front, until it encounters a 1
    Move a pointer right, from the end, until it encounters a 0
    Swap the elements at the two pointers (if they haven’t crossed)
    Repeat this for entire array – this is inplace and single pass.

    Code :

    public class swap01
    {
    public static void main(String arg[])
    {
    int[] a = {0,1,1,0,0,1,1,1,0};
    int l =0;
    int r= a.length-1;
    while(l {
    if(a[l] == 0)
    {
    l++;
    }
    else if(a[r] == 1)
    {
    r–;
    }
    else {
    swap(a,l,r);
    l++;
    r–;
    }
    }
    for(int i=0;i System.out.print(a[i] + ",");
    }
    private static void swap(int[] a, int l, int r)
    {
    int tmp = a[l];
    a[l] = a[r];
    a[r]=tmp;
    }
    }

    0 comments:

    Post a Comment