On Jul 4, 6:31 am, jalaj jaiswal <jalaj.jaiswa...@gmail.com> wrote:
> There is very long array of ints, and you are given pointer to base addr of
> this array.. each int is 16bit representation... you need to return the
> pointer to tht "bit" inside array where longest sequence of "1"s start
> for example. if your array has following in bit representation:
> 1111,0111,0011,1110,0000,10111
> then your longest sequence has 5 ones but the longest number has only 4
> ones.(so finding highest num wnt wrk)
> --
> With Regards,
> Jalaj Jaiswal
> +919026283397
> B.TECH IT
> IIIT ALLAHABAD

You can just define a function that accesses the array by bit index
and then scan in a simple manner to find the longest stretch of 1's.

I'll assume unsigned short is 16 bits.  This code is not compiled or
tested.

// Exact definition here depends on how you want to index bits.
// This is only one possibility.
int bitval(unsigned short *a, unsigned long i)
{
  return (a[i / 16ul] >> (i % 16 ul)) & 1;
}

// Return index of start of longest span of 1's.
// The special value NULLBITINDEX is returned if a is all 0's.

// Here's one possibility. Make this 64 bits if bit arrays can be very
large.
typedef unsigned long BITINDEX;
#define NULLBITINDEX (~0ul)

BITINDEX longest1span(unsigned short *a, int size)
{
  BITINDEX bitsize = size * 16, i, j;
  // Location and length of longest span found so far.
  BITINDEX r = NULLBITINDEX, len = 0;

  i = 0;
  while (1) {
    // Find start of a span of 1's.
    while(1) {
      if (i == bitsize) return r;
      if (bitval(a, i) == 1) break;
      i++;
    }
    // i now points to the start of a span of 1's.
    // Get index of next 0 in j.
    for (j = i + 1; j < bitsize; j++) {
      if (bitval(a, j) == 0) break;
    }
    // [i..j-1] is a new span of 1's
    // update longest span info
    if (j - i > len) {
      r = i;
      len = j - i;
    }
    // set preconditions for new span search
    i = j;
  }
}

-- 
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