Re: [algogeeks] Re: unsorted array problem

2011-08-26 Thread Sanjay Rajpal
XOR all the elements in the array, the result will be the XOR of the two
numbers occuring odd number of times.

Now take any set bit of th result(u can determine the position of any bit
set in the number). Divide the array such that for the numbers for which at
this location(where the bit is set in the result) is set and those where
this bit is not set.

now XOR both the sets, this will give u two numbers,one from each of the two
subsets.


Sanju
:)



On Fri, Aug 26, 2011 at 10:49 AM, Don dondod...@gmail.com wrote:

 I believe this is what techcoder is saying:

 int a[N];

 // Find the bitwise xor of all the array values.
 // These are the bits which are different between the two results.
 int xor = 0;
 for(i = 0; i  N; ++i)
  xor ^= a[N];

 // Find the low order bit of xor
 int bit = 1;
 while(!(xor  bit))
  bit = 1;

 // xor the values with bit set to get one result
 // xor the values with bit unset to get the other result
 int result1 = 0, result2 = 0;
 for(i = 0; i  n; ++i)
 {
  if (a[i]  bit) result1 ^= a[i];
  else result2 ^= a[i];
 }

 Now result1  result2 are the values which appear an odd number of
 times. It is O(n).

 Don

 On Aug 26, 12:13 pm, Dave dave_and_da...@juno.com wrote:
  @Tech: I'm not sure I understand your algorithm. Let's try it on
  {1,1,2,2,3,4,5,5,6,6,7,7}. The two number occurring an odd number of
  times are 3 and 4. We xor the numbers getting 7 = 111 in binary. Now
  how do we divide the numbers into two groups?
 
  Dave
 
  On Aug 26, 11:09 am, tech coder techcoderonw...@gmail.com wrote:
 
   it can be done in O(N) by using XOR ing the elements
   1: Xor all the elemnts since those elemnts that even freq will nullify
 each
   other we get number taht will tell in which the two required number
 differ.
   2: divide  the array in two sets  on the basis of bit in which numbers
   differ
   3:1 element will  be in one set another will be in another set
   4: XOR both the sets again we get both the elemts
   On Thu, Aug 25, 2011 at 12:50 PM, Umesh Jayas algowithum...@gmail.com
 wrote:
 
int main()
{
int arr[]={1,2,5,1,5,1,1,3,2,2,};
int elements = sizeof(arr)/sizeof(arr[0]);
int count=1;
int num;
sort(arr,arr+elements);
 
num=arr[0];
for(int i=1;ielements;i++)
{
if(arr[i]==num)
count++;
else
{
if(count%2==0)
{ num=arr[i];
 count=1;}
else
 {cout\narr[i-1];
 count=1;
 num=arr[i];
 }
}
}
getch();
}
 
complexity: O(nlogn)
 
 --
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
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at
   http://groups.google.com/group/algogeeks?hl=en.-Hide quoted text -
 
   - Show quoted text -

 --
 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
 algogeeks+unsubscr...@googlegroups.com.
 For more options, visit this group at
 http://groups.google.com/group/algogeeks?hl=en.



-- 
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 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Re: unsorted array problem

2011-08-26 Thread tech coder
@Tech: I'm not sure I understand your algorithm. Let's try it on
{1,1,2,2,3,4,5,5,6,6,7,7}. The two number occurring an odd number of
times are 3 and 4. We xor the numbers getting 7 = 111 in binary. Now
how do we divide the numbers into two groups?

see we come to know that both number differ at bit1  bit2 and bit3  we need
only bit1

set1 contain the numbers whose bit1 is set including 3
set2 contain the numbers whose bit1 is clear including  4

now xoring 1st set we get 3
xor ing 2nd set we get 4
(bacuase all others appear even no of time  they will nullify each
other)

-- 
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 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Re: unsorted array problem

2011-08-26 Thread tech coder
@ Don exactly waht u write i wanted to say

On Fri, Aug 26, 2011 at 11:52 AM, tech coder techcoderonw...@gmail.comwrote:

 @Tech: I'm not sure I understand your algorithm. Let's try it on
 {1,1,2,2,3,4,5,5,6,6,7,7}. The two number occurring an odd number of
 times are 3 and 4. We xor the numbers getting 7 = 111 in binary. Now
 how do we divide the numbers into two groups?

 see we come to know that both number differ at bit1  bit2 and bit3  we need
 only bit1

 set1 contain the numbers whose bit1 is set including 3
 set2 contain the numbers whose bit1 is clear including  4

 now xoring 1st set we get 3
 xor ing 2nd set we get 4
 (bacuase all others appear even no of time  they will nullify each
 other)



-- 
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 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Re: unsorted array problem

2011-08-26 Thread raj kumar
@don really cool algo man

-- 
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 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.