缺失的第一个正数(原地哈希)

    技术2023-09-22  55

    给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

    示例 1:

    输入: [1,2,0] 输出: 3 示例 2:

    输入: [3,4,-1,1] 输出: 2 示例 3:

    输入: [7,8,9,11,12] 输出: 1

    提示:

    你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。

    1、将所有的改为n+1,n是数组的长度

    for(int i=0;i<n;i++){ if(nums[i]<=0){ nums[i]=n+1; } }

    2、将每个元素对应的下标的元素改成负数

    for(int i=0;i<n;i++){ int x = abs(nums[i])-1; if(x<n){ nums[x] = -abs(nums[x]); } }

    3、不为负数的数组元素对应的下标+1就是结果

    Processed: 0.016, SQL: 9