Click to See Complete Forum and Search --> : Finding duplicates in an array


rahuls
March 20th, 2003, 08:55 AM
Hi I am trying to solve this puzzle:
Suppose you have an array of 1001 integers. The integers are in random order, but you know each of the integers is between 1 and 1000 (inclusive). In addition, each number appears only once in the array, except for one number, which occurs twice. Assume that you can access each element of the array only once. Describe an algorithm to find the repeated number. If you used auxiliary storage in your algorithm, can you find an algorithm that does not require it?


Its easy to solve it using secondary array of 100 integers however I am looking for a way to do it without using aux array.

Any ideas?
Thanks.

PaulWendt
March 20th, 2003, 09:05 AM
I'm not saying that it's not possible, but I cannot think of any way
to access the elements only once and not use auxiliary storage
while still retaining the amount of times each number has been
accessed. Of course, I'm not trying to imply that it is possible
either :) I just can't see any way that it can be done and I hope
to also be enlightened.

--Paul

Philip Nicoletti
March 20th, 2003, 09:23 AM
just add up the numbers ...

and subtract 500500 (which is 1000*1001/2)

The difference is the duplicate element.


The sum of 1 + 2 + ... + n = n*(n+1)/2

PaulWendt
March 20th, 2003, 09:31 AM
Dang! Each number appears only once in the array! How could
I miss that? :)

rahuls
March 21st, 2003, 12:19 PM
Hi Philip,
Thanks again for the solution.