题解 | 缺失的第一个正整数

缺失的第一个正整数

https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        // write code here
	  	// 有效区(0, l - 1)、垃圾区(r, ...)
        int l = 0, r = nums.length;
        while (l != r) {
		  	// 依次从左往右调整数组,使得[0]位置放1、[1]位置放2、[2]位置放3、...
            if (nums[l] == l + 1) l++;
		  	// 1. nums[l] <= l: [l]位置小于预期值l+1
		  	// 2. nums[l] > r: [l]位置超过了垃圾区
		  	// 3. nums[nums[l] - 1] == nums[l]: 与预期位置相等,出现重复数字
            else if (nums[l] <= l || nums[l] > r || nums[nums[l] - 1] == nums[l])
			  	// [l]位置数放垃圾区,同时垃圾区向左扩
                swap(nums, l, --r);
		  	// nums[nums[l] - 1] != nums[l]: 与预期位置不等,交换位置
            else swap(nums, l, nums[l] - 1);
        }
        return l + 1;
    }
    private void swap(int[] nums, int i, int j) {
        if (i == j) return;
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}

线性表基础 文章被收录于专栏

链表、递归、栈

全部评论

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
03-07 13:32
门头沟学院 C++
D0cC:你是本科生吗,太厉害了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务