Reputation: 11
I am struggling to find the exact solution for this question.
A university has two student clubs. The number of students registered to the first club is m and their IDs are stored in an array A (with m elements) whereas the number of students registered to the second club is n and their IDs are stored in an array B (with n elements), where m≤n. A student might be registered to either one of these clubs or both. We want to decide how many students are registered to both clubs. Given two arrays A and B along with their lenghts m and n, write a O(mlogn) algorithm (as a pseudocode) to find the number of elements that are registered to both clubs. For example, when A is [2, 6, 3, 9, 11, 8] and B is [3, 11, 7, 4, 2, 5, 1], the algorithm must return 3 corresponding to the students with IDs 2, 3 and 11.Explain why your running time is O(mlogn) in sufficient detail.
First thing that comes to my mind is sorting the array B and then searching match for each element in B from A. Sorting O(nlogn), looking for match O(mlogn) then the conluded result becomes O((m+n)logn).
Second way on my mind was to merge the arrays then look for the duplicates but idk.
Upvotes: 0
Views: 103
Reputation: 46399
There is something wrong with the question.
If B starts sorted, there is a O(m log(n))
algorithm.
If neither is sorted, there is a O(n log(m))
algorithm.
But if neither is sorted, you cannot even search B once without taking time O(n)
. And O(m log(n))
needs to run faster than that in the limit where m
goes to infinity while n = m^2
.
Upvotes: 1