## 題解 ### Brute force ```python= class Solution: def findKthPositive(self, arr: List[int], k: int) -> int: # Time complexity: O(n+k) # Space compleity: O(1) count = 0 cur = 0 num = 1 while count < k: if (cur < len(arr) and num != arr[cur]) or cur == len(arr): count += 1 else: cur += 1 num += 1 return num - 1 ``` ### Set 比對 ```python= class Solution: def findKthPositive(self, arr: List[int], k: int) -> int: # Time complexity: O(n+k) # Space compleity: O(1) arr = set(arr) num = 1 while k > 0: if num not in arr: k -= 1 num += 1 return num - 1 ``` ### K++ 1. 缺失的正整数一定 >= k 2. 数组中每出现一个 <= k 的数字, 意味着少了一个缺失的数字, 此时k+1 ```python= class Solution: def findKthPositive(self, arr: List[int], k: int) -> int: # Time complexity: O(n) # Space complexity: O(1) for num in arr: if num <= k: k += 1 return k ``` ### 二分搜索 Example: ``` k = 5 origin: [2,3,4,7,11] sup: [1,2,3,4,5] diff: [1,1,1,3,6] ``` 可以得知 **origin[i] + (k - diff[i]) = ans** => 7 + (5 - 3) = 9 ```python= class Solution: def findKthPositive(self, arr: List[int], k: int) -> int: # Time complexity: O(logn) # Space complexity: O(1) left, right = 0 , len(arr) - 1 while left <= right: mid = (left + right) >> 1 temp = arr[mid] - mid # 還沒完全搞懂 if temp <= k: left = mid + 1 else: right = mid - 1 return left + k ```