LeetCode No41. 缺失的第一个正数
题目
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
提示:
1 <= nums.length <= 5 * 10^5
-2^31 <= nums[i] <= 2^31 - 1
思路
常规方法其实就是先排序,然后再找最小缺失的正整数,但是这样时间复杂度为O(n*logn)。想要以O(n)的复杂度去完成的话,就是用哈希的思想了,数据长度为5*10^5,只要我们把出现的数按照其下标存起来,然后再遍历这个范围内的数,哪个下标没有存值也就代表哪个数字没有出现过。
AC代码
点击查看代码
public class Solution {
public int firstMissingPositive(int[] nums) {
int len = nums.length;
for(int i=0; i<len; i++) {
while( nums[i]>0 && nums[i]<=len && nums[nums[i]-1]!=nums[i] ) {
int num = nums[nums[i]-1];
nums[nums[i]-1] = nums[i];
nums[i] = num;
}
}
int index = 0;
for(; index<len; index++) {
if( nums[index]!=index+1 ) {
break ;
}
}
return index+1;
}
}
低调做人,高调做事。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2016-05-15 ACM题目————中位数