|   package cn.fansunion.leecode.number;   /**   * 1539. 第 k 个缺失的正整数 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。   *   * 请你找到这个数组里第 k 个缺失的正整数。 力扣   *   * @author wen.lei@brgroup.com   *   *         2022-2-19   */  public class KthMissingPositiveNumber {      /* 示例 1:             输入:arr = [2,3,4,7,11], k = 5      输出:9      解释:缺失的正整数包括 [1,5,6,8,9,10,12,13,...] 。第 5 个缺失的正整数为 9 。      示例 2:             输入:arr = [1,2,3,4], k = 2      输出:6      解释:缺失的正整数包括 [5,6,7,...] 。第 2 个缺失的正整数为 6 。                     提示:             1 <= arr.length <= 1000      1 <= arr[i] <= 1000      1 <= k <= 1000      对于所有 1 <= i < j <= arr.length 的 i 和 j 满足 arr[i] < arr[j]      */      /**       * 思路:从1到x遍历数组,数组中找到当前n值,就下一个;找不到,漏掉+1;<br/>就网上的很多代码,可读性差的要死       * @param arr       * @param k       * @return       */      public int findKthPositive(int[] arr, int k) {          //漏掉的数目          int skip = 0;          //数组中的元素,匹配到的个数(下标,逐步向后,但不一定每一次都命中-向后移)          int arrMatchIndex = 0;          //n<=1000不对,改成了“arr.length+k”,不一定非常精确          for (int n = 1; n <= arr.length+k; n++) {              //arr越界了,漏掉的数字+1              if (arrMatchIndex >= arr.length) {                  skip++;              } else {                  //arr没越界,数字不相等,漏掉的数字+1                  if (n == arr[arrMatchIndex]) {                      arrMatchIndex++;                  } else {                      skip++;                  }              }              //漏掉第k次,n就是那个数字              if (skip == k) {                  return n;              }          }          return -1;       }  }   |