class Solution:
    def findKthPositive(self, arr: List[int], k: int) -> int:
    """
    some restrains:
    1. sorted(strickly increasing) array, ideally always start with 1 
    2. 
    """
    # time O(N) space O(1)
        n = len(arr)
        if arr[0] != 1:
            if  k -(arr[0]-1) <= 0:
                    return k
            else:
                k = k - (arr[0]-1)
        for r in range(1,n): 
            if arr[r]-arr[r-1] > 1:
                diff = arr[r]-arr[r-1]-1
                if k-diff <= 0 :
                    return arr[r-1]+k
                else:
                    k -= diff
        return arr[-1] + k

Binary Search solution

"""
assuming first m elements are not missing.  for (m+1) th, the number of missing elements are A[m] - m - 1 
we need to find a point where kth number is between (A[m],A[m+1]]
"""
# time O(lgN) space O(1)
class Solution:
    def findKthPositive(self, A: List[int], k: int) -> int:
        l,r = 0, len(A)
        while l < r:
            mid = l + (r-l)//2 
           # print(f'l is {l}, r is {r}, mid is {mid}, m val is {A[mid]}')
            if A[mid] - mid -1 < k :
                l = mid + 1
            elif A[mid] - mid -1 == k:
                r = mid 
                #return mid-1+k 
            elif A[mid] - mid -1 > k:   
                r = mid  
        return l+k 
                

some test cases for handleing changes when A[m]-m-1 == k : [1,5,6,7,12,14,17,32,35,43,55,60,64,65,67,75,79,80,82,90,92,93,95,99,102,103,109,110,111,112,113,114,129,132,134,139,141,146,147,152,162,163,164,172,183,200,202,206,216,217,219,222,223,231,232,241,246,260,261,262,276,278,285,294,302,303,305,306,312,323,325,331,332,333,337,341,344,345,352,353,361,369,378,383,396,403,406,408,409,415,418,419,422,427,433,437,438,441,444,447,448,456,460,461,464,471,476,480,482,483,485,487,490,491,493,497,499,506,507,509,511,513,518,522,528,530,531,532,535,536,539,543,548,551,552,553,556,563,567,572,578,579,586,587,588,589,590,594,607,611,613,617,619,627,629,632,636,638,650,654,659,667,669,672,673,675,676,682,685,693,705,710,714,717,724,727,728,729,732,740,743,752,763,766,771,772,777,784,787,793,799,800,804,805,811,822,826,838,840,848,850,851,857,859,863,864,865,868,872,873,880,883,887,891,893,895,902,906,908,909,915,918,922,926,931,933,948,953,959,962,965,967,972,973,976,983,984,985,986,989,993] 71 output 92 expect 91

[2] 1

[1,3] 1

[8,11,16,20,29,30,32,33,37,39,42,44,46,47,48,50,52,56,60,63,64,65,68,70,72,74,80] 45