关闭

41 First Missing Positive

52人阅读 评论(0) 收藏 举报

文字分析部分摘自:

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;
	}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33901次
    • 积分:2737
    • 等级:
    • 排名:第13748名
    • 原创:246篇
    • 转载:71篇
    • 译文:0篇
    • 评论:0条