题目链接
LeetCode 41. 缺失的第一个正数[1]
题目描述
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例1
输入: [1,2,0] 输出 3
示例2
输入: [3,4,-1,1] 输出: 2
示例3
输入: [7,8,9,11,12] 输出: 1
说明:
- 你的算法的时间复杂度应为 ,并且只能使用常数级别的空间。
题解
如果之前一直坚持看我题解的同学,应该前几天刚看过下面这道题:
【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
韦阳的博客:【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法[2]
知乎专栏:【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法[3]
代码
c++
classSolution { public: intfirstMissingPositive(vector<int>&nums) { intn=nums.size(); nums.push_back(-1); for (inti=0; i<=n; ++i) { if (nums[i] <=0||nums[i] >n) { nums[i] =-1; } } for (inti=0; i<=n; ++i) { while (nums[i] !=-1&&i!=nums[i] &&nums[i] !=nums[nums[i]]) { swap(nums[i], nums[nums[i]]); } if (nums[i] !=-1&&i!=nums[i]) { nums[i] =-1; } } for (inti=1; i<=n; ++i) { if (nums[i] ==-1) returni; } returnn+1; } };
参考资料
[1]
LeetCode 41. 缺失的第一个正数: https://leetcode-cn.com/problems/first-missing-positive/
[2]
韦阳的博客:【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法: https://godweiyang.com/2020/03/16/leetcode-interview-17-19/
[3]
知乎专栏:【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法: https://zhuanlan.zhihu.com/p/113534188
作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~