Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /