/* * The top-submitted solution (beats 100%) is much easier to understand and implement in 3 simple steps. * * Find the range between lower and first element in the array. * Find ranges between adjacent elements in the array. * Find the range between upper and last element in the array. */ classSolution{ public List<String> findMissingRanges(int[] nums, int lower, int upper){ List<String> res=new LinkedList<>(); if(nums==null||nums.length==0) { res.add(formRange(lower,upper)); return res; } if(lower<nums[0]) res.add(formRange(lower,nums[0]-1)); for(int i=0;i<nums.length-1;i++){ if(nums[i]<nums[i+1]&&nums[i]+1<nums[i+1]) res.add(formRange(nums[i]+1,nums[i+1]-1)); } if(upper>nums[nums.length-1]) res.add(formRange(nums[nums.length-1]+1,upper)); return res; } public String formRange(int l,int r){ return l==r?String.valueOf(l):(l+"->"+r); } }