Write a function that returns the mode(s) of an integer array. Requirements: if all values are unique, return an empty list (there is no mode); allow and return multiple modes, ordered by first occurrence in the input; run in O(n) expected time and O(u) extra space where u is the number of unique values. Follow-ups: 1) How would you support a streaming array with unknown length using O(u_window) space and emit current modes over a sliding window of size W? 2) How would you break ties deterministically in case-insensitive string data while preserving stable order? 3) Analyze worst-case time and space. Examples: [3,1,2,2,3] -> [3,2] (both appear twice); [1,2,3] -> []; [7,7,7] -> [7].