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; } }