Combine a set of “ranges” to find least number of ranges
The program is NOT working as expected. You can see the bug if you give it the following input

    int[][] zipRanges1 = new int[][] { 
            new int[] { 1, 5 },
            new int[] { 2, 6 }, 
            new int[] { 3, 4 }
    };


The problem is that you compare ranges from the input only. The correct logic is that for each input range, you should iterate over newZipRanges and "insert" the current input in the correct place. You sohuld make the Logic to normalize the zipcode range piece of code into a method that compares and possibly merges two ranges.

However, the story does not end here. after the above processing is done (after you finish iterating over the input), you will need to iterate over the newZipRanges and normalize it. consider the following case: 

newZipRanges contains {1, 4}, {7, 9}
and now the input range you're processing is {1, 8} you will merge it into the first new range and produce newZipRanges == {1, 8}, {7, 9} which obviously needs normalizing.  I think after any modification to newZipRanges (after merging an input range into it) you need to iterate over the newZipRanges and see if any merging needs to be done (perhaps sorting every time? not sure)

one last advice, to merge overlapping ranges, use Math.min on the lower bounds and Math.max on the upper bounds. its nicer than the if question you have.