LeetCode 41. 缺失的第一个正数

新手学习中,有任何错误或者更好地方法、思路欢迎指教!


 #Array 6

题目难度:困难

题目描述:

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
 
进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?
 
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
  
提示:
0 <= nums.length <= 300
-2^31 <= nums[i] <= 2^31 - 1
 
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

1. 山路十八弯解法:

思路:
遍历数组,判断missing是否出现过,没出现过则count++。
当count等于数组长度时代表数组中没有该missing值,返回missing;否则missing++继续下一轮数组遍历。
max为数组中的最大值,作为循环跳出的条件。
3 ms,36.4 MB

class
Solution { public int firstMissingPositive(int[] nums) { int missing = 1; //没有出现的最小的正整数 int max = 0; //数组中的最大值(注意要赋初值!!!) int count; //数组中不与missing重复的数的个数 if (nums.length > 0){ max = nums[0]; do{ count = 0; for (int i = 0; i < nums.length; i++){ //遍历数组,判断missing是否出现过 if (nums[i] == missing){ continue; } else { count++; } if (nums[i] > max){ //查找数组中的最大值 max = nums[i]; } } if (count == nums.length) { //当数组中没有与missing重复的数时(missing未出现) return missing; } else missing++; } while (missing <= max); } return missing; } }

 

posted @ 2021-02-22 20:27  织秋  阅读(68)  评论(0编辑  收藏  举报