for such problems, assign 1 to 1 and -1 to 0

int start_index=0;
int end_index=0;
int new_start_index=start_index;
int new_end_index=end_index;

int arr[size] = {0};//size represents number of bits
int sum=0;

for (int(i=0;i<size;i++)
{
  if (a[i]& (1<<i)==0) //ith bit is zero
  {sum -=1; }
  else sum +=1;
  if (sum == 0)
  {//string of equal zeros and 1s found check if it is greater than
the previous one

    if (new_start_index - end_index ==1)
    {
       end_index = i;
    }
    else if ( new_end_index - new_start_index > end_index -
start_index)
    {
        start_index = new_start_index;
        end_index = i;
    }
    new_start_index = i+1;
    new_end_index = new_start_index;

    }

  }

if (start_index != end_index)
printf("the longest string with equal number of zeros and 1s is
starting @%d and ending at %d, start_index, end_index);

}




sharad kumar wrote:
> You are given an array ' containing 0s and 1s. Find O(n) time and O(1) space
> algorithm to find the maximum sub sequence which has equal number of 1s and
> 0s.
>
> Examples
> 1) 10101010
> The longest sub sequence that satisfies the problem is the input itself
>
> 2)1101000
> The longest sub sequence that satisfies the problem is 110100

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algoge...@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to