From 36843844a1900e576d3f017b827506d48e9eaed1 Mon Sep 17 00:00:00 2001 From: hongyiheng Date: Thu, 4 Nov 2021 13:53:36 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.1539.Kth Missing Positive Number --- .../README.md | 32 +++++++++++++++++-- .../README_EN.md | 32 +++++++++++++++++-- .../Solution.java | 18 +++++++++++ .../Solution.py | 12 +++++++ 4 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 solution/1500-1599/1539.Kth Missing Positive Number/Solution.java create mode 100644 solution/1500-1599/1539.Kth Missing Positive Number/Solution.py diff --git a/solution/1500-1599/1539.Kth Missing Positive Number/README.md b/solution/1500-1599/1539.Kth Missing Positive Number/README.md index decac597e3110..0cde90972dea0 100644 --- a/solution/1500-1599/1539.Kth Missing Positive Number/README.md +++ b/solution/1500-1599/1539.Kth Missing Positive Number/README.md @@ -49,7 +49,18 @@ ```python - +class Solution: + def findKthPositive(self, arr: List[int], k: int) -> int: + if arr[0] > k: + return k + left, right = 0, len(arr) + while left < right: + mid = (left + right) // 2 + if arr[mid] - mid - 1 < k: + left = mid + 1 + else: + right = mid + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1] ``` ### **Java** @@ -57,7 +68,24 @@ ```java - +class Solution { + public int findKthPositive(int[] arr, int k) { + if (arr[0] > k) { + return k; + } + int left = 0, right = arr.length; + while (left < right) { + int mid = (left + right) >> 1; + int cur = mid == arr.length ? Integer.MAX_VALUE : arr[mid]; + if (cur - mid - 1 < k) { + left = mid + 1; + } else { + right = mid; + } + } + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1]; + } +} ``` ### **...** diff --git a/solution/1500-1599/1539.Kth Missing Positive Number/README_EN.md b/solution/1500-1599/1539.Kth Missing Positive Number/README_EN.md index 1a57352771f77..8d3d096188237 100644 --- a/solution/1500-1599/1539.Kth Missing Positive Number/README_EN.md +++ b/solution/1500-1599/1539.Kth Missing Positive Number/README_EN.md @@ -43,13 +43,41 @@ ### **Python3** ```python - +class Solution: + def findKthPositive(self, arr: List[int], k: int) -> int: + if arr[0] > k: + return k + left, right = 0, len(arr) + while left < right: + mid = (left + right) // 2 + if arr[mid] - mid - 1 < k: + left = mid + 1 + else: + right = mid + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1] ``` ### **Java** ```java - +class Solution { + public int findKthPositive(int[] arr, int k) { + if (arr[0] > k) { + return k; + } + int left = 0, right = arr.length; + while (left < right) { + int mid = (left + right) >> 1; + int cur = mid == arr.length ? Integer.MAX_VALUE : arr[mid]; + if (cur - mid - 1 < k) { + left = mid + 1; + } else { + right = mid; + } + } + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1]; + } +} ``` ### **...** diff --git a/solution/1500-1599/1539.Kth Missing Positive Number/Solution.java b/solution/1500-1599/1539.Kth Missing Positive Number/Solution.java new file mode 100644 index 0000000000000..9840df493730a --- /dev/null +++ b/solution/1500-1599/1539.Kth Missing Positive Number/Solution.java @@ -0,0 +1,18 @@ +class Solution { + public int findKthPositive(int[] arr, int k) { + if (arr[0] > k) { + return k; + } + int left = 0, right = arr.length; + while (left < right) { + int mid = (left + right) >> 1; + int cur = mid == arr.length ? Integer.MAX_VALUE : arr[mid]; + if (cur - mid - 1 < k) { + left = mid + 1; + } else { + right = mid; + } + } + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1]; + } +} \ No newline at end of file diff --git a/solution/1500-1599/1539.Kth Missing Positive Number/Solution.py b/solution/1500-1599/1539.Kth Missing Positive Number/Solution.py new file mode 100644 index 0000000000000..46af436ebf4e0 --- /dev/null +++ b/solution/1500-1599/1539.Kth Missing Positive Number/Solution.py @@ -0,0 +1,12 @@ +class Solution: + def findKthPositive(self, arr: List[int], k: int) -> int: + if arr[0] > k: + return k + left, right = 0, len(arr) + while left < right: + mid = (left + right) // 2 + if arr[mid] - mid - 1 < k: + left = mid + 1 + else: + right = mid + return k - (arr[left - 1] - (left - 1) - 1) + arr[left - 1] \ No newline at end of file