【leetcode】Array——First Missing Positive(41)
来源:互联网 发布:每日一文 知乎 编辑:程序博客网 时间:2024/04/29 09:10
题目:
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0]
return 3
,
and [3,4,-1,1]
return 2
.
Your algorithm should run in O(n) time and uses constant space.
思路1:Bit Manipulation 受之前一道题目的启发Contains Duplicate(217)
用一个byte数组作为标记位,每个byte可以标记8个数字。遍历nums,并标记出现的正整数,然后从低位开始判断,第一个缺少的正整数。
同样这种方法存在缺陷就是byte数组的长度:按理应该是(2^32)/8
代码1:
public int firstMissingPositive(int[] nums) {byte[] mark = new byte[150000]; mark[0]|=1;//set 0 mark,方便后续分析for(int i : nums){if(i>0){int byteBlock = i/8;//确定i在第几个byte里面int byteIndex = i%8;//确定i在byte中具体的位置mark[byteBlock]|=1<<byteIndex;//把i在byte[]中的标记位设置1}}for(int i=0;i<mark.length;i++){if(mark[i]!=255){ //如果为255,说明btye中标记位全部为1,如果不是255,说明存在0for(int j=0;j<=7;j++){if(mark[i]!=(mark[i]|(1<<j))){//找到具体的低位的0return (j+8*i);}}}}return -1;}
思路2:从leetcode上看到的。把读取到的正整数放到对应的位置
【3,4,-1,1】=>【1,-1,3,4】 然后找到第一个不对应的元素即可。
见leetcode链接:https://leetcode.com/discuss/24013/my-short-c-solution-o-1-space-and-o-n-time
代码2:
class Solution{public: int firstMissingPositive(int A[], int n) { for(int i = 0; i < n; ++ i) while(A[i] > 0 && A[i] <= n && A[A[i] - 1] != A[i]) swap(A[i], A[A[i] - 1]); for(int i = 0; i < n; ++ i) if(A[i] != i + 1) return i + 1; return n + 1; }};
0 0
- 【leetcode】Array——First Missing Positive(41)
- LeetCode(41)First Missing Positive
- LeetCode —— First Missing Positive
- leetcode——First Missing Positive
- leetcode 041 —— First Missing Positive
- LeetCode题解——First Missing Positive
- leetcode——First Missing Positive
- leetcode.array--41. First Missing Positive
- leetcode——41——First Missing Positive
- LeetCode(41) First Missing Positive
- [leetcode 41] First Missing Positive
- [Leetcode] 41 - First Missing Positive
- [LeetCode 41]First Missing Positive
- [leetcode] #41 First Missing Positive
- First Missing Positive - LeetCode 41
- Leetcode 41 First Missing Positive
- leetcode 41: First Missing Positive
- LeetCode-41 First Missing Positive
- 装饰模式
- (5)ICE通信器是干嘛的
- HTTPS协议与SSL协议的完整交互过程
- Android中实现点击变换图片
- 设计模式六大原则
- 【leetcode】Array——First Missing Positive(41)
- 「学习笔记」3.19代码学习
- 19. Remove Nth Node From End of List
- HTML入门(2)
- 【DBaas】如何建立一个Oracle 数据库云服务
- SDL学习小结(1)
- POJ2420爬山算法
- [Docker] ubuntu14.04LTS 上部署自己的 provider docker registry
- GDCPC GO