41
41
42
42
<!-- 这里可写通用的实现逻辑 -->
43
43
44
+ ** 方法一:二分查找**
45
+
44
46
<!-- tabs:start -->
45
47
46
48
### ** Python3**
@@ -54,12 +56,12 @@ class Solution:
54
56
return k
55
57
left, right = 0 , len (arr)
56
58
while left < right:
57
- mid = (left + right) // 2
58
- if arr[mid] - mid - 1 < k:
59
- left = mid + 1
60
- else :
59
+ mid = (left + right) >> 1
60
+ if arr[mid] - mid - 1 >= k:
61
61
right = mid
62
- return k - (arr[left - 1 ] - (left - 1 ) - 1 ) + arr[left - 1 ]
62
+ else :
63
+ left = mid + 1
64
+ return arr[left - 1 ] + k - (arr[left - 1 ] - (left - 1 ) - 1 )
63
65
```
64
66
65
67
### ** Java**
@@ -75,18 +77,56 @@ class Solution {
75
77
int left = 0 , right = arr. length;
76
78
while (left < right) {
77
79
int mid = (left + right) >> 1 ;
78
- int cur = mid == arr. length ? Integer . MAX_VALUE : arr[mid];
79
- if (cur - mid - 1 < k) {
80
- left = mid + 1 ;
81
- } else {
80
+ if (arr[mid] - mid - 1 >= k) {
82
81
right = mid;
82
+ } else {
83
+ left = mid + 1 ;
83
84
}
84
85
}
85
- return k - (arr[left - 1 ] - (left - 1 ) - 1 ) + arr[left - 1 ] ;
86
+ return arr[left - 1 ] + k - (arr[left - 1 ] - (left - 1 ) - 1 );
86
87
}
87
88
}
88
89
```
89
90
91
+ ### ** C++**
92
+
93
+ ``` cpp
94
+ class Solution {
95
+ public:
96
+ int findKthPositive(vector<int >& arr, int k) {
97
+ if (arr[ 0] > k) return k;
98
+ int left = 0, right = arr.size();
99
+ while (left < right)
100
+ {
101
+ int mid = (left + right) >> 1;
102
+ if (arr[ mid] - mid - 1 >= k) right = mid;
103
+ else left = mid + 1;
104
+ }
105
+ return arr[ left - 1] + k - (arr[ left - 1] - (left - 1) - 1);
106
+ }
107
+ };
108
+ ```
109
+
110
+ ### **Go**
111
+
112
+ ```go
113
+ func findKthPositive(arr []int, k int) int {
114
+ if arr[0] > k {
115
+ return k
116
+ }
117
+ left, right := 0, len(arr)
118
+ for left < right {
119
+ mid := (left + right) >> 1
120
+ if arr[mid]-mid-1 >= k {
121
+ right = mid
122
+ } else {
123
+ left = mid + 1
124
+ }
125
+ }
126
+ return arr[left-1] + k - (arr[left-1] - (left - 1) - 1)
127
+ }
128
+ ```
129
+
90
130
### ** ...**
91
131
92
132
```
0 commit comments