首页 > 代码库 > 41. First Missing Positive
41. First Missing Positive
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,1,3,10,11],返回的值为2。思路是对原来的数组进行重组,使得数组变为从1至n的情况。
以[3,1,2]为例,如果nums[i] != nums[nums[i]-1],则swap相关的位置。
nums[0] = 3, nums[nums[0]-1] = nums[1] = 1,所以swap变为[1,3,2]。 i依然是0,nums[0] = 0+1, 则i+1变为1,以此类推
nums[1] = 3, nums[nums[1]-1] = nums[2] = 2,所以swap变为[1,2,3]。
如果有重复,比如[1,3,1],
nums[1] = 3, nums[nums[1]-1] = nums[2] = 1,所以swap变为[1,1,3]。
nums[1] = 1, nums[nums[1]-1] = nums[0] = 1,重复的话直接i加1,变为2。
public int FirstMissingPositive(int[] nums) { int i =0; while(i< nums.Count()) { if(nums[i]==i+1|| nums[i]<=0 || nums[i]> nums.Count() ) i++; else if(nums[i] != nums[nums[i]-1]) Swap(nums,i,nums[i]-1); else i++; } int j=0; while(j< nums.Count()) { if(nums[j] == j+1) j++; else return j+1; } return j+1; } private void Swap(int[] nums,int i,int j ) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }
41. First Missing Positive
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。