前言
刷题专栏到目前已经是第十七篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天的这道《丢失的数字》一题,是关于处理数组的一道题。
在处理数组时,无非就是排序、获取最大值、获取最小值等等的操作。
此题也是与这些操作相关,接下来就一起来看一下吧。
算法题:丢失的数字
根据此题目的描述来看,是要从一个无序的整数数组中,找出零到整数数组长度的区间中,找出在整数数组中不存在的数字。
如果整数数组的长度为n,则区间就是[0, n]。
根据示例中的例子来看,整数数组为[3,0,1],则区间为[0,3]。
根据这个示例,其实是比较简单的。
逻辑也比较清晰,可以通过遍历来分别将所有的值遍历一下,因为在示例中,只会有一个丢失的数字。
所以只需要遍历后,递增的数字进行比对,如果发现没有的情况下,就直接返回该值即可。
在写代码之前,我原本打算通过双重循环来判断。
后来想了想,感觉还是太耗费性能,于是使用了Set集合。
接下来看一下代码吧。
代码展示
代码使用Set集合和数组循环遍历方法解决。
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.missingNumber(new int[]{3,0,1})); } public int missingNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int n : nums){ set.add(n); } //循环 for (int i = 0; i < nums.length + 1; i++) { if(!set.contains(i)){ return i; } } return 0; } }
代码执行结果
代码执行结果一般,还是需要继续完善一下。
总结
本题主要考察的是关于数组的元素遍历,大家学会了吗?