刷题专栏(十七):丢失的数字

128 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

前言

刷题专栏到目前已经是第十七篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天的这道《丢失的数字》一题,是关于处理数组的一道题。

在处理数组时,无非就是排序、获取最大值、获取最小值等等的操作。

此题也是与这些操作相关,接下来就一起来看一下吧。

image.png

算法题:丢失的数字

根据此题目的描述来看,是要从一个无序的整数数组中,找出零到整数数组长度的区间中,找出在整数数组中不存在的数字。

如果整数数组的长度为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;
    }

}

代码执行结果

代码执行结果一般,还是需要继续完善一下。

image.png

总结

本题主要考察的是关于数组的元素遍历,大家学会了吗?