We need to maintain mobileNumber and its location in memory. The challenge is that we have more than 5 million of users and storing the location for each user will be like
Normally you can use specialized data structures to store ranges and implement the queries, e.g. Interval Tree.
However, since phone number ranges do not overlap, you can just store the ranges in a standard tree based data structure (Binary Search Tree, AVL Tree, Red-Black Tree, B Tree, would all work) sorted only by [begin].
For findLocation(number), use corresponding tree search algorithm to find the first element that has [begin] value smaller than the number, check its [end] value and verify if the number is in that range. If a match if found, return the location, otherwise the number is not in any range.
For changeLocation() operation:
I am assuming you are using the same operation for simply adding new nodes.
More practically, you can store all the entries in a database, build an index on [begin].
First of all range = [begin;end;location]
Use two structures:
ranges begins ends and locations by beginsApply following algo:
beginend and location for begin