Leetcode--41. 缺失的第一个正数
給定一個未排序的整數數組,找出其中沒有出現的最小的正整數。
示例?1:
輸入: [1,2,0]
輸出: 3
示例?2:
輸入: [3,4,-1,1]
輸出: 2
示例?3:
輸入: [7,8,9,11,12]
輸出: 1
說明:
你的算法的時間復雜度應為O(n),并且只能使用常數級別的空間。
?
思路:時間復雜度要求為o(n),那不可以用暴力法一次又一次的搜索
可以將每個數字放到對應的位置上,數字值超過數組大小的不用管,值小于等于0的不用管
最后從頭遍歷數組,出現第一個位置上缺失的值,那這個值就是最小的正整數
如果一直沒有出現,那最小正整數就是nums.length+1
eg:
[1,5,2,0,-2]
-->進行對應位置的放置,[1,2,-2,0,5]
我們發現,第一個沒有對應值的位置是i=2處,此時值應為3,但是卻是-2,所以我們缺失的就是3
[1,3,4,2,5]
-->進行對應位置的放置,[1,2,3,4,5]
放置完成后,我們遍歷數組,發現都有對應的值,所以我們缺失的就是nums.length+1=6
?
此方法遍歷了兩次數組,因此時間復雜度為2*O(n),也就是O(n)
?
提交的代碼:
class?Solution?{
????public?int?firstMissingPositive(int[]?nums)?{
?????????int?t;
????????????for(int?i=0;i<nums.length;)
????????????{
????????????????if(nums[i]<=0)
????????????????{
????????????????????i?++;
????????????????????continue;
????????????????}
????????????????if(nums[i]-1>=nums.length)
????????????????{
????????????????????i++;
????????????????????continue;
????????????????}
????????????????if(nums[i]!=i+1&&nums[nums[i]-1]!=nums[i])
????????????????{
????????????????????t?=?nums[nums[i]-1];
????????????????????nums[nums[i]-1]?=?nums[i];
????????????????????nums[i]?=?t;
????????????????}
????????????????else
????????????????{
????????????????????i++;
????????????????}
????????????}
????????????for(int?i=0;i<nums.length;i++)
????????????{
????????????????if(nums[i]!=i+1)
????????????????{
????????????????????return?i+1;
????????????????}
????????????}
??????????????return?nums.length+1;
????}
}
總結
以上是生活随笔為你收集整理的Leetcode--41. 缺失的第一个正数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题12:矩阵中的路
- 下一篇: tomcat修改端口号与eclipse中