Someone asked me to give him problems so that he can train for an interview. I gave him the problems from google posted here and in turn he gave me another one:
You have an array of length n. It is filled with n random numbers between 0 and n-1. The task it to find out if any of them are repeated.
The trivial solution would be to sort the array and detect any repeated number in the sorted array. This one has
O(n * log(n))
time complexity. We should be able to do better. Here is what i came out with after a little thinking.- start with the first element of the array which has a value different from the index at which it is located. For
int[] arr = {0, 1, 2, 3, 5, 4}
i would start with the position 4 because the value of 5 is different than its index. - take the value and go in the array at the position represented by that index. Look at the value from there. If the value is the same as that index we just found our duplicate. If not then remember the new value, put the old value in there and do the same.
- if the next value is the original starting position you have just arranged a subset of the original array in the proper place. select the next number matching the condition at step 1 if possible. If not then you are done, you have the array sorted and you also know that there are no repeted numbers in it.
Mihai.
No comments:
Post a Comment