LeetCode 163. Missing Ranges
阿新 • • 發佈:2019-01-07
Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
Example:
Input: nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99,
Output: [“2”, “4->49”, “51->74”, “76->99”]
注意審題,lower一定是小於等於nums[0]的,而upper是大於等於nums[n-1]的
public List<String> findMissingRanges(int[] nums, int lower, int upper) { List<String> res = new ArrayList<>(); StringBuilder sb = new StringBuilder(); if (nums.length == 0) { if (lower == upper) sb.append(lower); else sb.append(lower).append("->").append(upper); res.add(sb.toString()); return res; } if (nums[0] != lower) { if (lower + 1 == nums[0]) sb.append(lower); else sb.append(lower).append("->").append((nums[0]-1)); res.add(sb.toString()); sb = new StringBuilder(); } for (int i = 0; i < nums.length - 1; i++) { if (nums[i] + 1 >= nums[i+1] || nums[i] == Integer.MAX_VALUE) { continue; } else { if (nums[i] + 2 == nums[i+1])sb.append((nums[i]+1)); else sb.append((nums[i] + 1)).append("->").append((nums[i+1]-1)); res.add(sb.toString()); sb = new StringBuilder(); } } if (nums[nums.length - 1] != upper) { if (nums[nums.length - 1]+1 == upper) sb.append(upper); else sb.append((nums[nums.length - 1] + 1)).append("->").append(upper); res.add(sb.toString()); } return res; }
優化版本:
public List<String> findMissingRanges(int[] n, int lo, int up){ List<String> re = new ArrayList<>(); for(int i = 0; i < n.length; i++) { if(i != 0 && n[i] == n[i-1])continue; if(n[i] == lo) { lo++; // if(lo < n[i])return re; }else { if(lo == n[i] -1)re.add(lo + ""); else re.add(lo+"->"+(n[i]-1)); lo = n[i]+1; // if(lo < n[i])return re; } } if(lo == up)re.add(lo + ""); else if(lo < up) re.add(lo+"->"+up); return re; }