题解 | 缺失的第一个正整数
缺失的第一个正整数
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; } }
线性表基础 文章被收录于专栏
链表、递归、栈