File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments