Sorting millions of integers
The algorithm you have implemented is known as counting sort.  Its run-time cost is linear in the size of the input – faster than any comparison-based sorting algorithm can possibly get.  (At the cost of being also linear in the difference of the maximum and minimum element in the input.)  Congratulations if you've come up with this idea on your own.  Since they already give you the largest number in the array as additional input, it seems very likely that they wanted to see this algorithm.  (Of course, you can find the maximum yourself in linear time, if needed.)

Remarks about your code:


The rangePosition array is initialized with an exact copy of twentyMillion and then only ever read.  Why did you create it instead of using twentyMillion directly?
If twentyMillion contains a negative number, your implementation will explode.  Maybe you simply forgot to mention that all the inputs are guaranteed to be non-negative?  Otherwise, you'd also need to know the minimum value and normalize your keys to that.  (This could also help you save something if the minimum is much larger than zero.)
If the highestNumber is extremely large, you will get a problem.  For example, you will probably not be able to allocate a new int[Integer.MAX_VALUE] without receiving an OutOfMemoryError.  (And if you allow for negative numbers in the input, you might even need an array larger than Integer.MAX_VALUE!)  And even if you could allocate it, iterating over it will take forever.  If you want to make your code more robust, you could decide by some heuristic whether the combination of twentyMillion.length and highestNumber warrants the overhead of counting sort or you'd be better off using a comparison-based O(n&nbsp;log(n)) fallback-algorithm.
twentyMillion is a poor name for a variable that does not necessarily name an array of length 20M.