本文主要是介绍懒人读算法(六)-查找剩余范围,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
趣味题
给出一组数组(给出最小值,给出最大值),返回剩余没有列出的值
如:给出 [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);}
这篇关于懒人读算法(六)-查找剩余范围的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!