题目:力扣https://leetcode-cn.com/problems/first-missing-positive/
class Solution {
public int firstMissingPositive(int[] nums) {
Arrays.sort(nums);
int num = 1;
for(int i=0;i<nums.length;i++){
if(nums[i]<=0){
continue;
}
if(i>0 && nums[i]==nums[i-1]){
continue;
}
if(nums[i]>num){
break;
}else{
num++;
}
}
return num;
}
}
思路:这道题按照第一反应几分钟就敲出来,看了看题解发现,按照我的做法上来就先给数组排序确实不讲武德,这个做法有点不配题目设定的“困难”。但不论怎么样,都是一份能通过的代码,就先记录下来吧。排序,跳开负数和重复数,一一对应往上数,数到没有的那个整数就是缺失的最小正数。
1.排序。
Arrays.sort(nums);
2.声明一个变量num,等会就是按着这个数一直往上数。
int num = 1;
3.遍历数组,开始逐一对应地数数。
for(int i=0;i<nums.length;i++){
//......
}
4.跳开非正数和重复数。
if(nums[i]<=0){
continue;
}
if(i>0 && nums[i]==nums[i-1]){
continue;
}
5.顺着往上数,数到“断层”则跳出循环,返回当前num。
if(nums[i]>num){
break;
}else{
num++;
}
return num;