LeetCode刷题|缺失的第一个正数
【LeetCode刷题|缺失的第一个正数】41.缺失的第一个正数
题解:原地hash法,解读题意我们可以知道,最小的正整数肯定出现在[1,n+1]之间,为什么这么说?假设1,2,3,4,5连续的5个数,我们可以知道最小的肯定是6,但如果是不连续的,那肯定最小的就是序列中缺失的那个。那么我们的思路就是如果出现了非正整数,那么我们令非正整数等于n+1(只要是大于n的数都行),这样将它排除在外。如果是x正数,我们就将其标记为已出现,具体做法就是将nums[x-1]标记为负数
(nums[x-1]=-Math.abs(nums[x-1])),利用绝对值避免出现重复的数打乱标记,最后遍历我们的索引下标就行了。
class Solution {public int firstMissingPositive(int[] nums) {int len=nums.length;
//将小于等于0的置为len+1,
for(int i=0;
i0){return i+1;
}
}
//没有找到,则代表序列是连续的,则返回n+1即可
return len+1;
}
}
推荐阅读
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- leetcode|leetcode 92. 反转链表 II
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- 一个农民的初心!
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- Leetcode|Leetcode No.198打家劫舍
- [leetcode数组系列]1两数之和
- 锻炼这么多年,6种你的锻炼可能缺失的必要动作,勿忘勤练
- 数据结构和算法|LeetCode 的正确使用方式