neat solution :)

On 11/17/06, Dhyanesh (ધયાનેશ) <[EMAIL PROTECTED]> wrote:
>
> 1) Scan through the array counting number of 0s and 1s in MSB, as well as
> separating the 0s into an array arr0 and 1s into an array arr1 (if you do
> not want to use extra space you can use splitting around pivot pass of
> quicksort).
> 2) You would know how many 0s and 1s should be present in MSB for the
> number 1 ... n (this would be n/2 and n/2 if n is a power of 2).
> 3) Either the 0s or 1s would be less, so the missing number has that digit
> as MSB.
> 4) Take that bucket i.e. arr0 or arr1 and repeat steps 1 to 3.
>
> The complexity of this is n + n/2 + n/4 ...  = 2n = O(n).
>
> -Dhyanesh
>
>
> > On 11/17/06, Arun <[EMAIL PROTECTED]> wrote:
> > >
> > > the original problem if the array is unsorted, u can do it, by
> > counting the
> > > number of 1's (and hence 0's), in each bit position. ( i.e vertically
> > scan
> > >  thru all the numbers once for each bit position). given any n, u know
> > how
> > > many 1's shud be present in msb,2nd msb and so-on. based on this u can
> > find
> > > the missing number
> > >  but this is O(n . (number of bit positions - which is atmost lg(n)) )
> >
> > still too slow. There is an O(n) solution :)
> > >
> > > to make the problem easier I have made the assumption that array is
> > sorted
> > > :-)
> > > since the array is sorted , u know that there will be  2 ^(n-1) 0's
> > followed
> > > by 2 ^(n-1) 1's in the MSB(most significatn bit) and
> > > 2 ^(n-2) 0's and followed by 2^(n-1) 1's repeated twice.
> > > So in general, u have for ith significant bit (i=1 means msb), 2^(n-i)
> > 0s
> > > then 2^(n-i) 1s repeated i times.
> > > Now just do a binary search. Starting with the msb, extract(i,n/2) .
> > if its
> > > 1(supposed to be 0), the missing number is in first half(and msb of
> > missing
> > > number is 0). do the same for second msb and so on...
> > > comlpexity = O(lg n) , for n=2^k.
> > >
> > >
> > >
> > >
> > > On 11/17/06, Norbert < [EMAIL PROTECTED]> wrote:
> > > >
> > > > extract(i, n) - i'th bit from position n in an array A - i'th bit of
> > A[n]
> > > >
> > > > On 11/17/06, Idris <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > >
> > > > > Is this extracting i'th bit from a[X] or just extracting Integer
> > from i
> > > > > th index of an array???
> > > > >
> > > > > if its the later, then get the number and sum up by using OR
> > > > > operation.... not sure:-)
> > > > >
> > > > > then subtract it from n(n+1)/2="missing Number"
> > > > >
> > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > > > >
> > > >
> > >
> >
> >
> >
> >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups-beta.google.com/group/algogeeks
-~----------~----~----~----~------~----~------~--~---

Reply via email to