Skip to content

Commit e81ecb2

Browse files
committed
feat: add solutions to lc problem: No.1060
No.1060.Missing Element in Sorted Array
1 parent 50384df commit e81ecb2

File tree

6 files changed

+261
-2
lines changed

6 files changed

+261
-2
lines changed

solution/1000-1099/1060.Missing Element in Sorted Array/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,115 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58+
**方法一:二分查找**
59+
60+
我们设计一个函数 $missing(i)$,表示 $nums[i]$ 与 $nums[0]$ 之间缺失的元素个数。那么 $missing(i)$ 就等于 $nums[i] - nums[0] - i$。我们可以通过二分查找找到最小的 $i$,使得 $missing(i) \geq k$,那么 $nums[i - 1] + k - missing(i - 1)$ 就是第 $k$ 个缺失的元素。
61+
62+
时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 $nums$ 的长度。
63+
5864
<!-- tabs:start -->
5965

6066
### **Python3**
6167

6268
<!-- 这里可写当前语言的特殊实现逻辑 -->
6369

6470
```python
65-
71+
class Solution:
72+
def missingElement(self, nums: List[int], k: int) -> int:
73+
def missing(i: int) -> int:
74+
return nums[i] - nums[0] - i
75+
76+
n = len(nums)
77+
if k > missing(n - 1):
78+
return nums[n - 1] + k - missing(n - 1)
79+
l, r = 0, n - 1
80+
while l < r:
81+
mid = (l + r) >> 1
82+
if missing(mid) >= k:
83+
r = mid
84+
else:
85+
l = mid + 1
86+
return nums[l - 1] + k - missing(l - 1)
6687
```
6788

6889
### **Java**
6990

7091
<!-- 这里可写当前语言的特殊实现逻辑 -->
7192

7293
```java
94+
class Solution {
95+
public int missingElement(int[] nums, int k) {
96+
int n = nums.length;
97+
if (k > missing(nums, n - 1)) {
98+
return nums[n - 1] + k - missing(nums, n - 1);
99+
}
100+
int l = 0, r = n - 1;
101+
while (l < r) {
102+
int mid = (l + r) >> 1;
103+
if (missing(nums, mid) >= k) {
104+
r = mid;
105+
} else {
106+
l = mid + 1;
107+
}
108+
}
109+
return nums[l - 1] + k - missing(nums, l - 1);
110+
}
111+
112+
private int missing(int[] nums, int i) {
113+
return nums[i] - nums[0] - i;
114+
}
115+
}
116+
```
117+
118+
### **C++**
119+
120+
```cpp
121+
class Solution {
122+
public:
123+
int missingElement(vector<int>& nums, int k) {
124+
auto missing = [&](int i) {
125+
return nums[i] - nums[0] - i;
126+
};
127+
int n = nums.size();
128+
if (k > missing(n - 1)) {
129+
return nums[n - 1] + k - missing(n - 1);
130+
}
131+
int l = 0, r = n - 1;
132+
while (l < r) {
133+
int mid = (l + r) >> 1;
134+
if (missing(mid) >= k) {
135+
r = mid;
136+
} else {
137+
l = mid + 1;
138+
}
139+
}
140+
return nums[l - 1] + k - missing(l - 1);
141+
}
142+
};
143+
```
73144
145+
### **Go**
146+
147+
```go
148+
func missingElement(nums []int, k int) int {
149+
missing := func(i int) int {
150+
return nums[i] - nums[0] - i
151+
}
152+
n := len(nums)
153+
if k > missing(n-1) {
154+
return nums[n-1] + k - missing(n-1)
155+
}
156+
l, r := 0, n-1
157+
for l < r {
158+
mid := (l + r) >> 1
159+
if missing(mid) >= k {
160+
r = mid
161+
} else {
162+
l = mid + 1
163+
}
164+
}
165+
return nums[l-1] + k - missing(l-1)
166+
}
74167
```
75168

76169
### **...**

solution/1000-1099/1060.Missing Element in Sorted Array/README_EN.md

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,100 @@
5151
### **Python3**
5252

5353
```python
54-
54+
class Solution:
55+
def missingElement(self, nums: List[int], k: int) -> int:
56+
def missing(i: int) -> int:
57+
return nums[i] - nums[0] - i
58+
59+
n = len(nums)
60+
if k > missing(n - 1):
61+
return nums[n - 1] + k - missing(n - 1)
62+
l, r = 0, n - 1
63+
while l < r:
64+
mid = (l + r) >> 1
65+
if missing(mid) >= k:
66+
r = mid
67+
else:
68+
l = mid + 1
69+
return nums[l - 1] + k - missing(l - 1)
5570
```
5671

5772
### **Java**
5873

5974
```java
75+
class Solution {
76+
public int missingElement(int[] nums, int k) {
77+
int n = nums.length;
78+
if (k > missing(nums, n - 1)) {
79+
return nums[n - 1] + k - missing(nums, n - 1);
80+
}
81+
int l = 0, r = n - 1;
82+
while (l < r) {
83+
int mid = (l + r) >> 1;
84+
if (missing(nums, mid) >= k) {
85+
r = mid;
86+
} else {
87+
l = mid + 1;
88+
}
89+
}
90+
return nums[l - 1] + k - missing(nums, l - 1);
91+
}
92+
93+
private int missing(int[] nums, int i) {
94+
return nums[i] - nums[0] - i;
95+
}
96+
}
97+
```
98+
99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
int missingElement(vector<int>& nums, int k) {
105+
auto missing = [&](int i) {
106+
return nums[i] - nums[0] - i;
107+
};
108+
int n = nums.size();
109+
if (k > missing(n - 1)) {
110+
return nums[n - 1] + k - missing(n - 1);
111+
}
112+
int l = 0, r = n - 1;
113+
while (l < r) {
114+
int mid = (l + r) >> 1;
115+
if (missing(mid) >= k) {
116+
r = mid;
117+
} else {
118+
l = mid + 1;
119+
}
120+
}
121+
return nums[l - 1] + k - missing(l - 1);
122+
}
123+
};
124+
```
60125
126+
### **Go**
127+
128+
```go
129+
func missingElement(nums []int, k int) int {
130+
missing := func(i int) int {
131+
return nums[i] - nums[0] - i
132+
}
133+
n := len(nums)
134+
if k > missing(n-1) {
135+
return nums[n-1] + k - missing(n-1)
136+
}
137+
l, r := 0, n-1
138+
for l < r {
139+
mid := (l + r) >> 1
140+
if missing(mid) >= k {
141+
r = mid
142+
} else {
143+
l = mid + 1
144+
}
145+
}
146+
return nums[l-1] + k - missing(l-1)
147+
}
61148
```
62149

63150
### **...**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
int missingElement(vector<int>& nums, int k) {
4+
auto missing = [&](int i) {
5+
return nums[i] - nums[0] - i;
6+
};
7+
int n = nums.size();
8+
if (k > missing(n - 1)) {
9+
return nums[n - 1] + k - missing(n - 1);
10+
}
11+
int l = 0, r = n - 1;
12+
while (l < r) {
13+
int mid = (l + r) >> 1;
14+
if (missing(mid) >= k) {
15+
r = mid;
16+
} else {
17+
l = mid + 1;
18+
}
19+
}
20+
return nums[l - 1] + k - missing(l - 1);
21+
}
22+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func missingElement(nums []int, k int) int {
2+
missing := func(i int) int {
3+
return nums[i] - nums[0] - i
4+
}
5+
n := len(nums)
6+
if k > missing(n-1) {
7+
return nums[n-1] + k - missing(n-1)
8+
}
9+
l, r := 0, n-1
10+
for l < r {
11+
mid := (l + r) >> 1
12+
if missing(mid) >= k {
13+
r = mid
14+
} else {
15+
l = mid + 1
16+
}
17+
}
18+
return nums[l-1] + k - missing(l-1)
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public int missingElement(int[] nums, int k) {
3+
int n = nums.length;
4+
if (k > missing(nums, n - 1)) {
5+
return nums[n - 1] + k - missing(nums, n - 1);
6+
}
7+
int l = 0, r = n - 1;
8+
while (l < r) {
9+
int mid = (l + r) >> 1;
10+
if (missing(nums, mid) >= k) {
11+
r = mid;
12+
} else {
13+
l = mid + 1;
14+
}
15+
}
16+
return nums[l - 1] + k - missing(nums, l - 1);
17+
}
18+
19+
private int missing(int[] nums, int i) {
20+
return nums[i] - nums[0] - i;
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def missingElement(self, nums: List[int], k: int) -> int:
3+
def missing(i: int) -> int:
4+
return nums[i] - nums[0] - i
5+
6+
n = len(nums)
7+
if k > missing(n - 1):
8+
return nums[n - 1] + k - missing(n - 1)
9+
l, r = 0, n - 1
10+
while l < r:
11+
mid = (l + r) >> 1
12+
if missing(mid) >= k:
13+
r = mid
14+
else:
15+
l = mid + 1
16+
return nums[l - 1] + k - missing(l - 1)

0 commit comments

Comments
 (0)