懒人读算法(六)-查找剩余范围

来源:互联网 发布:mac改语言 编辑:程序博客网 时间:2024/05/18 00:07

趣味题

给出一组数组(给出最小值,给出最大值),返回剩余没有列出的值

如:给出 [0, 1, 3, 50, 75] 最小值为0,最大值为99则返回[“2”, “4->49”, “51->74”, “76->99”]

答案

public class Solution {    public List<String> findMissingRanges(int[] nums, int lower, int upper) {        ArrayList<String> result = new ArrayList<String>();        for(int i = 0; i <= nums.length; i++) {            long start = i == 0 ? lower : (long)nums[i - 1] + 1;            long end = i == nums.length ? upper : (long)nums[i] - 1;            addMissing(result, start, end);        }        return result;    }    void addMissing(ArrayList<String> result, long start, long end) {        if(start > end) {            return;        }        else if(start == end) {            result.add(start + "");        }        else {            result.add(start + "->" + end);        }    }}

解析:首先拿到题目会想,有一个数组,有一个最大值,有一个最小值。那么我们就要遍历所有的数组,
数组0,和最大时,start ,end 分别为最小值,和最大值,其余start为当前数组前一个+1,end 为当前数组的数字-1。拿到start和end 后按规则就可以解答出来了
核心思路:遍历数组,确立当前值,和上一个值

核心代码:

      for(int i = 0; i <= nums.length; i++) {            long start = i == 0 ? lower : (long)nums[i - 1] + 1;            long end = i == nums.length ? upper : (long)nums[i] - 1;            addMissing(result, start, end);        }