新余 网站建设,WordPress模板修改后无反应,门户网站建设价格,网页设计框架布局文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识一、题目
1、题目描述
给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。
请你找到这个数组里第 k 个缺失的正整数。 示例 1#xff1a; 输入 输入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 。 2、基础框架
C版本给出的基础框架如下
3、原题链接
https://leetcode.cn/problems/kth-missing-positive-number/
二、解题报告
1、思路分析 (1)(1)(1)arr[i] - i - 1的值代表前面缺失了多少个数。比如示例1中arr[4] - 4 - 1 11 - 4 -1 6。代表11前面缺失了6个数。 (2)(2)(2)考虑普遍情况当缺失的数在数组中最大最小元素代表的区间范围内时我们只要找到arr[i] - i - 1 k arr[i-1] - i -1 -1的位置i,缺失的数肯定位于arr[i-1]和arr[i]之间。 (3)(3)(3)缺失的数为arr[i] - (arr[i] - i - 1 - k 1) ik (4)(4)(4)对于边界条件我们提前判断当arr[0] k时说明缺失的第k个数在数组左边外侧直接返回k。当arr[arr.length-1] k时说明缺失的第k个数在数组右边外侧直接返回k arr.length
2、时间复杂度
时间复杂度为O(logn)
3、代码详解
class Solution {public int findKthPositive(int[] arr, int k) {if (arr[0] k) {return k;}if (arr[arr.length - 1] - arr.length k) {return k arr.length;}int l 0;int r arr.length - 1;while(l r) {int mid l (r - l) / 2;if (arr[mid] - mid - 1 k) {l mid 1;} else {r mid;}}return r k;}
}三、本题小知识