public static List findMissingRanges(int[] nums, int lower, int upper) { List missingRanges = new ArrayList<>(); long next = lower; // use long to avoid overflow issues for (int num : nums) { if (num > next) { missingRanges.add(formatRange(next, num - 1)); } next = (long) num + 1; // move to next expected number } if (next <= upper) { missingRanges.add(formatRange(next, upper)); } return missingRanges; } private static String formatRange(long start, long end) { return start == end ? String.valueOf(start) : start + "->" + end; }