My solution was inspired by the Tetris game.
Solution highlight (dubbed as 'Tetrise process'):
use three key-value pairs for bookkeeping, with key the element, value the count of the element. In a main loop, we keep at most 3 latest distinct elements. When the count of all three keys are non-zero, we decrement the counts of all and eliminate zero-count key(s), if any. At the end, there may or may not be some residual elements. These are the survivors of the Tetris process. Note that there can be no more than 3 residual elements. If nothing left, we return null. Otherwise we loop through the original n elements, counting the number of these residual elements and return those whose count is > n/3.
Hint of proof:
To show the correctness of the above algorithm, note that for an element must survive the Tetris process or remain in the residue to satisfy the requirement. To see why, let's denote the number of removal operations as m and the total count of residual elements r. Then we have
n = 3 * m + r.
From here we get m <= n/3, because r >= 0.
If an element didn't survive the Tetrise process, the maximum occurrence it can appear is m <= n/3.
Time complexity O(n), space complexity O(1).