题目来源: NC30 缺失的第一个正整数
题目描述:
- 描述: 给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数 数据范围: ,
示例1:
输入:[1,0,2]
返回值:3
示例2:
输入:[-2,3,4,1,5]
输出:2
思路:哈希表
- 知识点:哈希表 思路:
- 由题意我们可以知道,
无重复元素,那么对于一个长度为n的数组,而且没有重复,则意味着如果数组填满了1 ~ n,则缺失的第一个正整数是n+1,如果数组并没有填满1 ~ n,那么缺失的第一个正整数就是整数1~n之间的某一个数. - 对于这种查询是否有元素缺失(1~n之间是否有缺失),我们完全可以使用哈希表来进行辅助确认,其实如果是使用一个辅助数组也可以
- 由题意我们可以知道,
- 具体做法:
- 1.首先我们要构建一个哈希表来辅助操作
- 2.对数组进行遍历,将每个元素放入哈希表的key值中,并将对应的value设为1表示存在
- 3.从1开始,遍历到n,在哈希表中查询该数是否存在,如果没有存在,那么正说明数组中也没有这个数字,则改数字就是缺失的第一个正整数
- 4.如果整数1~n在哈希表中都出现过了,那么这就说明数组填满了整数1 ~ n,即缺失的第一个正整数就是n+1
具体实现:
import java.util.*;
public class Solution {
public int minNumberDisappeared (int[] nums) {
int n = nums.length;
HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
//哈希表记录数组中出现的每个数字
for(int i = 0; i < n; i++)
mp.put(nums[i], 1);
int res = 1;
//从1开始找到哈希表中第一个没有出现的正整数
while(mp.containsKey(res))
res++;
return res;
}
}
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情”