Skip to content

Commit eb400b3

Browse files
authored
feat: add solutions to lc problem: No.2009.Minimum Number of Operations to Make Array Continuous (doocs#571)
* feat: add cpp solution to lc problem: No.2009 * feat: add java solution to lc problem: No.2009 * feat: add python3 solution to lc problem: No.2009
1 parent d65cb0e commit eb400b3

File tree

5 files changed

+153
-2
lines changed

5 files changed

+153
-2
lines changed

solution/2000-2099/2009.Minimum Number of Operations to Make Array Continuous/README.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,66 @@
6868
<!-- 这里可写当前语言的特殊实现逻辑 -->
6969

7070
```python
71-
71+
class Solution:
72+
def minOperations(self, nums: List[int]) -> int:
73+
n = len(nums)
74+
nums = sorted(set(nums))
75+
76+
ans = n
77+
for i, start in enumerate(nums):
78+
end = start + n - 1
79+
j = bisect_right(nums, end)
80+
remainLen = j - i
81+
ans = min(ans, n - remainLen)
82+
return ans
7283
```
7384

7485
### **Java**
7586

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

7889
```java
90+
class Solution {
91+
public int minOperations(int[] nums) {
92+
int N = nums.length;
93+
if (N == 1) return 0;
94+
Arrays.sort(nums);
95+
int M = 1;
96+
for (int i = 1; i < N; i++) {
97+
if (nums[i] != nums[i - 1])
98+
nums[M++] = nums[i];
99+
}
100+
101+
int j = 0;
102+
int ans = N;
103+
for (int i = 0; i < M; i++) {
104+
while (j < M && nums[j] <= N + nums[i] - 1) j++;
105+
ans = Math.min(ans, N - j + i);
106+
}
107+
108+
return ans;
109+
}
110+
}
111+
```
79112

113+
### **C++**
114+
115+
```cpp
116+
class Solution {
117+
public:
118+
int minOperations(vector<int>& nums) {
119+
sort(nums.begin(), nums.end());
120+
int End = unique(nums.begin(), nums.end()) - nums.begin();
121+
int n = nums.size();
122+
123+
int len = 0;
124+
for (int i = 0; i < End; ++i) {
125+
int temp = upper_bound(nums.begin(), nums.begin() + End, n + nums[i] - 1) - nums.begin() - i;
126+
len = max(len, temp);
127+
}
128+
return n - len;
129+
}
130+
};
80131
```
81132

82133
### **...**

solution/2000-2099/2009.Minimum Number of Operations to Make Array Continuous/README_EN.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,64 @@ The resulting array is [1,2,3,4], which is continuous.
6363
### **Python3**
6464

6565
```python
66-
66+
class Solution:
67+
def minOperations(self, nums: List[int]) -> int:
68+
n = len(nums)
69+
nums = sorted(set(nums))
70+
71+
ans = n
72+
for i, start in enumerate(nums):
73+
end = start + n - 1
74+
j = bisect_right(nums, end)
75+
remainLen = j - i
76+
ans = min(ans, n - remainLen)
77+
return ans
6778
```
6879

6980
### **Java**
7081

7182
```java
83+
class Solution {
84+
public int minOperations(int[] nums) {
85+
int N = nums.length;
86+
if (N == 1) return 0;
87+
Arrays.sort(nums);
88+
int M = 1;
89+
for (int i = 1; i < N; i++) {
90+
if (nums[i] != nums[i - 1])
91+
nums[M++] = nums[i];
92+
}
93+
94+
int j = 0;
95+
int ans = N;
96+
for (int i = 0; i < M; i++) {
97+
while (j < M && nums[j] <= N + nums[i] - 1) j++;
98+
ans = Math.min(ans, N - j + i);
99+
}
100+
101+
return ans;
102+
}
103+
}
104+
```
72105

106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
int minOperations(vector<int>& nums) {
112+
sort(nums.begin(), nums.end());
113+
int End = unique(nums.begin(), nums.end()) - nums.begin();
114+
int n = nums.size();
115+
116+
int len = 0;
117+
for (int i = 0; i < End; ++i) {
118+
int temp = upper_bound(nums.begin(), nums.begin() + End, n + nums[i] - 1) - nums.begin() - i;
119+
len = max(len, temp);
120+
}
121+
return n - len;
122+
}
123+
};
73124
```
74125

75126
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int minOperations(vector<int>& nums) {
4+
sort(nums.begin(), nums.end());
5+
int End = unique(nums.begin(), nums.end()) - nums.begin();
6+
int n = nums.size();
7+
8+
int len = 0;
9+
for (int i = 0; i < End; ++i) {
10+
int temp = upper_bound(nums.begin(), nums.begin() + End, n + nums[i] - 1) - nums.begin() - i;
11+
len = max(len, temp);
12+
}
13+
return n - len;
14+
}
15+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public int minOperations(int[] nums) {
3+
int N = nums.length;
4+
if (N == 1) return 0;
5+
Arrays.sort(nums);
6+
int M = 1;
7+
for (int i = 1; i < N; i++) {
8+
if (nums[i] != nums[i - 1])
9+
nums[M++] = nums[i];
10+
}
11+
12+
int j = 0;
13+
int ans = N;
14+
for (int i = 0; i < M; i++) {
15+
while (j < M && nums[j] <= N + nums[i] - 1)
16+
j++;
17+
ans = Math.min(ans, N - j + i);
18+
}
19+
20+
return ans;
21+
}
22+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def minOperations(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
nums = sorted(set(nums))
5+
6+
ans = n
7+
for i, start in enumerate(nums):
8+
end = start + n - 1
9+
j = bisect_right(nums, end)
10+
remainLen = j - i
11+
ans = min(ans, n - remainLen)
12+
return ans

0 commit comments

Comments
 (0)