标签:ssi || function ber pos missing for corn 应该
缺失的第一个正数。题意是给一个未排序的整数数组,找出其中没有出现的最小的正整数。例子,
Example 1:
Input: [1,2,0] Output: 3Example 2:
Input: [3,4,-1,1] Output: 2Example 3:
Input: [7,8,9,11,12] Output: 1
这题的思路有些类似桶排序,需要在对应的坐标上找到对应的数字,即数字i应该出现在坐标为i - 1的位置上,这样也能排除负数和大于数组长度的正数。 按照这个思路,需要扫描两遍,第一遍是将所有正整数放到他们应该去的位置上,第二遍再次扫描input的时候就能找出第一个缺失的正数了。
时间O(n)
空间O(1)
1 /** 2 * @param {number[]} nums 3 * @return {number} 4 */ 5 var firstMissingPositive = function (nums) { 6 // corner case 7 if (nums === null || nums.length === 0) return 1; 8 9 // normal case 10 for (let i = 0; i < nums.length; i++) { 11 while (nums[i] > 0 && nums[i] < nums.length && nums[nums[i] - 1] !== nums[i]) { 12 let temp = nums[nums[i] - 1]; 13 nums[nums[i] - 1] = nums[i]; 14 nums[i] = temp; 15 } 16 } 17 18 // double check 19 for (let i = 0; i < nums.length; i++) { 20 if (nums[i] !== i + 1) { 21 return i + 1; 22 } 23 } 24 return nums.length + 1; 25 };
[LeetCode] 41. First Missing Positive
标签:ssi || function ber pos missing for corn 应该
原文地址:https://www.cnblogs.com/aaronliu1991/p/12425097.html