学渣记事本

打渔还是晒网?

41 First Missing Positive

文字分析部分摘自:

http://blog.csdn.net/nanjunxiao/article/details/12973173


思路:

虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。

思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)

下图以题目中给出的第二个例子为例,讲解操作过程。



public static int firstMissingPositive(int[] nums)
	{
		int len=nums.length;
		if(len==0)
			return 1;
		
		for(int i=0;i<len;i++)
		{
			while(nums[i]!=i+1)
			{
				if(nums[i]>=len||nums[i]<=0||nums[i]==nums[nums[i]-1])
					break;
				int temp=nums[i];
				nums[i]=nums[temp-1];
				nums[temp-1]=temp;
			}
		}
		
		for(int i=0;i<len;i++)
			if(nums[i]!=i+1)
				return i+1;
		
		return len+1;
	}



阅读更多
上一篇39 Combination Sum
下一篇45. Jump Game II
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭