Dada una matriz de números enteros ordenados, donde el rango de elementos está en el rango inclusivo [lower, upper], devuelve los rangos que faltan.
Ejemplo:
Entrada: nums = [0, 1, 3, 50, 75], inferior = 0 y superior = 99,
Producción: [«2», «4->49», «51->74», «76->99»]
Solución Java
public List<String> findMissingRanges(int[] nums, int lower, int upper) { List<String> result = new ArrayList<>(); int start = lower; if(lower==Integer.MAX_VALUE){ return result; } for(int i=0; i<nums.length; i++){ //handle duplicates, e.g., [1,1,1] lower=1 upper=1 if(i<nums.length-1 && nums[i]==nums[i+1]){ continue; } if(nums[i] == start){ start++; }else{ result.add(getRange(start, nums[i]-1)); if(nums[i]==Integer.MAX_VALUE){ return result; } start = nums[i]+1; } } if(start<=upper){ result.add(getRange(start, upper)); } return result; } private String getRange(int n1, int n2) { return n1 == n2 ? String.valueOf(n1) : String.format("%d->%d" , n1, n2); } |