当前位置: 代码迷 >> 综合 >> leetcode_41:First Missing Positive
  详细解决方案

leetcode_41:First Missing Positive

热度:70   发布时间:2023-12-10 22:45:20.0

这个题目是求缺失的最小正整数,所以一定是要看给定的所有数,然后从1开始数,直到找到一个不存在的正整数为止。这里我们就想到了使用数组来作为一个简单的哈希表,下标作为Key,数组的值作为Value。接下来可以分析一下求解这个题目要注意的地方:

  • 要知道如果给定10个数,那么缺失的最小值最大只能为11,也就是数组的长度+1,因为若为11需要前面10个正数为1~10才可以,只要有一个数X不在这个范围,那缺失的值就是这个X。
  • 数组中还有可能存在极大的值(大正数)和极小的值(小负数),所以要想办法处理这些比较“特殊”的值。
  • 综上,可以用一个新的数组来存原来的数组中各元素出现的次数,数组内存放的是给定数组中所有元素出现的次数。加入3出现在给定数组中,则新数组中下标为3元素+1。所以这个数组前后均会多出一个元素:开头存放非正数的个数,末尾存放大于给定数组长度的个数

能够得出代码如下:

    public int firstMissingPositive(int[] nums) {int[] temp = new int[nums.length + 2];for (int num : nums) {if (num <= 0)		temp[0]++;			//开头存非正数的个数else if (num > nums.length)temp[temp.length-1]++;			//末尾存大于给定数组长度的数的个数else {temp[num]++;			//新数组中各元素对应下标的元素加1,表示这个元素的个数}}int i;for (i = 1; i < temp.length; i++) {			//找到第一个不为0的数,则就是它对应的下标if (temp[i] == 0)return i;}return i;}
  相关解决方案