leetcode 41. 缺失的第一个正数-java
题目所属分类
原题链接
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
代码案例:输入:nums = [1,2,0]
输出:3
题解
### 时间复杂度和空间复杂度都为O(n)
也就是题目没有那么多限制的情况下好做
- 把所有的元素放到哈希表里面
- 哈希表中没有出现的话 从小到大枚举正整数 那么那个数就是答案
class Solution {
public int firstMissingPositive(int[] nums) {
HashSet<Integer> m = new HashSet<>();
for(int i = 0 ; i < nums.length ; i++){
m.add(nums[i]);
}
int res = 1 ;
while(m.contains(res)) res++;
return res;
}
}
空间复杂度为O(1)
class Solution {
public int firstMissingPositive(int[] nums) {
int n = nums.length;
for(int i = 0 ; i< n ; i++){
while(nums[i] > 0 && nums[i] <= n &&nums[i] != i + 1&& nums[i] != nums[nums[i]-1]){
swap(nums,i,nums[i]-1);
}
}
for(int i = 0; i <n ; i++){
if(nums[i] != i+1) return i+1 ;
}
return n +1 ;
}
public void swap(int[] nums ,int a ,int b ){
int t = nums[a];
nums[a] = nums[b];
nums[b] = t ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)