Problem: 41. 缺失的第一个正数
文章目录
- 题目描述
- 思路
- 复杂度
- Code
题目描述
思路
1.将nums看作为一个哈希表,每次我们将数字n移动到nums[n - 1]的位置(例如数字1应该存在nums[0]处…),则在实际的代码操作中应该判断nums[i]与nums[nums[i] - 1]是否相等,若不相等要交换对应下标位置的元素,同时要保证当前位置的元素不为负数;
2.依次遍历数组nums,若nums[i] != i + 1则返回i + 1;
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为数组nums的大小
空间复杂度:
O ( 1 ) O(1) O(1)
Code
class Solution {/*** First Missing Positive** @param nums Given array* @return int*/public int firstMissingPositive(int[] nums) {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, nums[i] - 1, i);}}for (int i = 0; i < len; ++i) {if (nums[i] != i + 1) {return i + 1;}}return len + 1;}private void swap(int[] nums, int index1, int index2) {int temp = nums[index1];nums[index1] = nums[index2];nums[index2] = temp;}
}