Leetcode之first missing positive
2016-02-12 14:51
323 查看
转自/article/2365650.html
Given an unsorted integer array, find the first missing positive integer.
For example,
Given
and
Your algorithm should run in O(n) time and uses constant space.
[cpp] view
plain copy
class Solution {
public:
int firstMissingPositive(int A[], int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(NULL==A || n<1)
return 1;
int pos=0;
while(pos<n)
{
if(A[pos]>0 && A[pos] != pos+1 && A[pos]-1<n && A[pos]!=A[A[pos]-1])
{
swap(A[pos],A[A[pos]-1]);
}
else
++pos;
}
for(int i=0;i<n;++i)
{
if(i+1 != A[i])
return i+1;
}
return n+1;
}
void swap(int &a,int &b)
{
int tmp = a;
a = b;
b= tmp;
}
};
思路:
虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。
思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
下图以题目中给出的第二个例子为例,讲解操作过程。
![](http://images.cnitblog.com/blog/300640/201304/21220310-d1b03fc59dd24e82b6db34a2cae12111.jpg)
妈蛋,这题挣扎好久。首先思路上,其次临界条件,这题和下面题异曲同工:
n个元素的数组,里面的数都是0~n-1范围内的,求数组中重复的某一个元素,没有返回-1, 要求时间性能O(n) 空间性能O(1)。
python代码:
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.
[cpp] view
plain copy
class Solution {
public:
int firstMissingPositive(int A[], int n) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(NULL==A || n<1)
return 1;
int pos=0;
while(pos<n)
{
if(A[pos]>0 && A[pos] != pos+1 && A[pos]-1<n && A[pos]!=A[A[pos]-1])
{
swap(A[pos],A[A[pos]-1]);
}
else
++pos;
}
for(int i=0;i<n;++i)
{
if(i+1 != A[i])
return i+1;
}
return n+1;
}
void swap(int &a,int &b)
{
int tmp = a;
a = b;
b= tmp;
}
};
思路:
虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。
思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
下图以题目中给出的第二个例子为例,讲解操作过程。
![](http://images.cnitblog.com/blog/300640/201304/21220310-d1b03fc59dd24e82b6db34a2cae12111.jpg)
妈蛋,这题挣扎好久。首先思路上,其次临界条件,这题和下面题异曲同工:
n个元素的数组,里面的数都是0~n-1范围内的,求数组中重复的某一个元素,没有返回-1, 要求时间性能O(n) 空间性能O(1)。
python代码:
class Solution(object): def firstMissingPositive(self, nums): """ :type nums: List[int] :rtype: int """ if nums == None or len(nums) == 0: return 1 length = len(nums) pos = 0 while pos < length: if nums[pos] >= 1 and nums[pos] != pos + 1 and nums[pos] <= length and nums[pos] != nums[nums[pos] - 1]: self.swap(nums, pos, nums[pos] - 1) else: pos += 1 for i in range(length): if nums[i] != i + 1: return i + 1 return length + 1 def swap(self, nums, pos, nums_pos): temp = nums[pos] nums[pos] = nums[nums_pos] nums[nums_pos] = temp
相关文章推荐
- Educational Codeforces Round 7 C. Not Equal on a Segment 并查集
- Count the string(hdu3336)
- LeetCode 98 Validate Binary Search Tree判断是否为合法二叉树
- 方法的调用
- XML VS SQLite
- POJ 1985 Cow Marathon(树的直径)
- spring(AOP)多个切面
- Educational Codeforces Round 7 B. The Time 水题
- BZOJ 3672: [Noi2014]购票( 树链剖分 + 线段树 + 凸包 )
- uvaoj-1225:数数字
- 关于Windows7 64的注册表读写问题
- Building Maintainable Software-java篇之Write Simple Units of Code
- sdptool 设备服务查找命令使用
- 汇编软件MASM和调试工具DEBUG的使用
- java基础20递归
- POJ 2631 Roads in the North(树的直径)
- Volley学习记录(二)
- mongodb分片部署
- 解决ADB端口占用问题
- Soket转发消息服务(群聊)