leetcode hot100数组:缺失的第一个正数

为了知道第一个缺失的正数,可以将所有的整数按照顺序放到数组里面,然后遍历数组,哪个地方不是对应的正数,那么就缺失了这个地方的对应的正数。

需要放进数组进行排列的数据需要满足要求:正数、大小小于等于数组大小的数

如何进行排列,只需要遍历到某个索引,然后将这个地方的数据放到合适的地方就行了。应当让这两个数交换:nums[i] 和nums[nums[i]-1],之所以减一就是为了满足上述要求。那么交换一次就行了吗?不行,因为交换过来的数不一定就是放到了合适的位置,所以需要while循环

class Solution {

public int firstMissingPositive(int[] nums) {

for(int i = 0;i<nums.length;i++){

int cur = nums[i];

while(cur>0&&cur<=nums.length&&cur!=nums[cur-1]){

int temp = cur;

nums[i] = nums[cur-1];

nums[cur-1] = cur;

cur = nums[i];

}

}

for(int i = 0;i<nums.length;i++){

if(nums[i]!=i+1){

return i+1;

}

}

return nums.length+1;

}

}

相关推荐
菜菜小狗的学习笔记6 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka6 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石0086 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct6 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
本喵是FW7 小时前
C语言手记1
java·c语言·算法
咱就是说不配啊7 小时前
3.19打卡day33
数据结构·c++·算法
2501_924952697 小时前
嵌入式C++电源管理
开发语言·c++·算法
2401_842623657 小时前
C++中的访问者模式高级应用
开发语言·c++·算法
森林里的程序猿猿8 小时前
垃圾收集器G1和ZGC
java·jvm·算法
机器学习之心8 小时前
LSBoost增强算法回归预测+SHAP可解释分析+新数据预测(多输入单输出)MATLAB代码
算法·matlab·回归·lsboost·shap可解释分析