Skip to content

Commit 998b2da

Browse files
authored
Add 1533_Kth_Missing_Positive_Number.java (qiyuangong#48)
* Add Kth_Missing_Positive_Number.java Contributed by @dvlpsh
1 parent 8207d2c commit 998b2da

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
public int findKthPositive(int[] a, int k)
3+
{
4+
int B[] = new int[a.length];
5+
6+
//equation (A)
7+
//B[i]=a[i]-i-1
8+
9+
10+
//B[i]=number of missing numbers BEFORE a[i]
11+
for(int i=0;i<a.length;i++)
12+
B[i]=a[i]-i-1; //-1 is done as here missing numbers start from 1 and not 0
13+
14+
//binary search upper bound of k
15+
//smallest value>=k
16+
17+
int lo=0,hi=B.length-1;
18+
19+
while(lo<=hi)
20+
{
21+
int mid = lo+(hi-lo)/2;
22+
23+
if(B[mid]>=k)
24+
hi=mid-1;
25+
else
26+
lo=mid+1;
27+
}
28+
29+
//lo is the answer
30+
31+
/*now the number to return is a[lo]-(B[lo]-k+1) (EQUATION B)
32+
//where (B[lo]-k+1) is the number of steps we need to go back
33+
//from lo to retrieve kth missing number, since we need to find
34+
//the kth missing number BEFORE a[lo], we do +1 here as
35+
//a[lo] is not a missing number when B[lo]==k
36+
//putting lo in equation(A) above
37+
//B[i]=a[i]-i-1
38+
//B[lo]=a[lo]-lo-1
39+
and using this value of B[lo] in equation B
40+
//we return a[lo]-(a[lo]-lo-1-k+1)
41+
we get lo+k as ans
42+
so return it*/
43+
44+
return lo+k;
45+
46+
}
47+
}

0 commit comments

Comments
 (0)