一、题目
1、审题
2、分析:
在时间复杂度为 O(n)条件下求出数组中所缺失的最小正整数。
二、解答
1、思路:
数组大小为 n, 则所缺失的正整数范围 为 1~n+1;考虑将下标为 i 的位置放入对应大小为 i +1 的元素,则最终遍历时查找下标 i 对应的元素不是 i + 1则为缺失的最小正整数。
class Solution { public int firstMissingPositive(int[] nums) { // 将 下标为 i 的位置对应放置数字大小为 i+1; int len = nums.length; for (int i = 0; i < len; i++) { while(nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] != nums[i]) { swap(nums, i, nums[i] - 1); } }
// 查找 for (int i = 0; i < len; i++) { if(nums[i] != i + 1) return i + 1; } return len + 1; } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }