import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        // write code here
        int left = 0, right = nums.length, temp;  // 双指针
        // right 及其右边都是无效数字
        while (left < right) {
            if (nums[left] == left + 1) {
                left++;  // 当前位置存放的内容是合法的
            } else if (nums[left] < left + 1 || nums[left] > right || nums[left] == nums[nums[left] - 1]) {
                // nums[left] 在 left 左边或者 right 右边或者重复出现  交换 left 和 right - 1
                temp = nums[left]; nums[left] = nums[--right]; nums[right] = temp;
            } else {  // 说明当前值是有效的 交换 left 和 nums[left] - 1
                temp = nums[left]; nums[left] = nums[nums[left] - 1]; nums[temp - 1] = temp;  // 不能使用 nums[left]
            }
        }
        return left + 1;
    }
}