Skip to content

Commit 9dbf88f

Browse files
authored
feat: add solutions to lc problem: No.2009 (#4419)
No.2009.Minimum Number of Operations to Make Array Continuous
1 parent ffca226 commit 9dbf88f

File tree

5 files changed

+246
-0
lines changed

5 files changed

+246
-0
lines changed

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

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,39 @@ func minOperations(nums []int) int {
178178
}
179179
```
180180

181+
#### TypeScript
182+
183+
```ts
184+
function minOperations(nums: number[]): number {
185+
const n = nums.length;
186+
nums.sort((a, b) => a - b);
187+
let m = 1;
188+
for (let i = 1; i < n; ++i) {
189+
if (nums[i] !== nums[i - 1]) {
190+
nums[m++] = nums[i];
191+
}
192+
}
193+
let ans = n;
194+
for (let i = 0; i < m; ++i) {
195+
const j = search(nums, nums[i] + n - 1, i, m);
196+
ans = Math.min(ans, n - (j - i));
197+
}
198+
return ans;
199+
}
200+
201+
function search(nums: number[], x: number, left: number, right: number): number {
202+
while (left < right) {
203+
const mid = (left + right) >> 1;
204+
if (nums[mid] > x) {
205+
right = mid;
206+
} else {
207+
left = mid + 1;
208+
}
209+
}
210+
return left;
211+
}
212+
```
213+
181214
#### Rust
182215

183216
```rust
@@ -310,6 +343,60 @@ func minOperations(nums []int) int {
310343
}
311344
```
312345

346+
#### TypeScript
347+
348+
```ts
349+
function minOperations(nums: number[]): number {
350+
nums.sort((a, b) => a - b);
351+
const n = nums.length;
352+
let m = 1;
353+
for (let i = 1; i < n; i++) {
354+
if (nums[i] !== nums[i - 1]) {
355+
nums[m] = nums[i];
356+
m++;
357+
}
358+
}
359+
let ans = n;
360+
for (let i = 0, j = 0; i < m; i++) {
361+
while (j < m && nums[j] - nums[i] <= n - 1) {
362+
j++;
363+
}
364+
ans = Math.min(ans, n - (j - i));
365+
}
366+
return ans;
367+
}
368+
```
369+
370+
#### Rust
371+
372+
```rust
373+
impl Solution {
374+
pub fn min_operations(mut nums: Vec<i32>) -> i32 {
375+
nums.sort();
376+
let n = nums.len();
377+
if n == 0 {
378+
return 0;
379+
}
380+
let mut m = 1usize;
381+
for i in 1..n {
382+
if nums[i] != nums[i - 1] {
383+
nums[m] = nums[i];
384+
m += 1;
385+
}
386+
}
387+
let mut ans = n as i32;
388+
let mut j = 0usize;
389+
for i in 0..m {
390+
while j < m && nums[j] - nums[i] <= n as i32 - 1 {
391+
j += 1;
392+
}
393+
ans = ans.min(n as i32 - (j as i32 - i as i32));
394+
}
395+
ans
396+
}
397+
}
398+
```
399+
313400
<!-- tabs:end -->
314401

315402
<!-- solution:end -->

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

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,39 @@ func minOperations(nums []int) int {
179179
}
180180
```
181181

182+
#### TypeScript
183+
184+
```ts
185+
function minOperations(nums: number[]): number {
186+
const n = nums.length;
187+
nums.sort((a, b) => a - b);
188+
let m = 1;
189+
for (let i = 1; i < n; ++i) {
190+
if (nums[i] !== nums[i - 1]) {
191+
nums[m++] = nums[i];
192+
}
193+
}
194+
let ans = n;
195+
for (let i = 0; i < m; ++i) {
196+
const j = search(nums, nums[i] + n - 1, i, m);
197+
ans = Math.min(ans, n - (j - i));
198+
}
199+
return ans;
200+
}
201+
202+
function search(nums: number[], x: number, left: number, right: number): number {
203+
while (left < right) {
204+
const mid = (left + right) >> 1;
205+
if (nums[mid] > x) {
206+
right = mid;
207+
} else {
208+
left = mid + 1;
209+
}
210+
}
211+
return left;
212+
}
213+
```
214+
182215
#### Rust
183216

184217
```rust
@@ -311,6 +344,60 @@ func minOperations(nums []int) int {
311344
}
312345
```
313346

347+
#### TypeScript
348+
349+
```ts
350+
function minOperations(nums: number[]): number {
351+
nums.sort((a, b) => a - b);
352+
const n = nums.length;
353+
let m = 1;
354+
for (let i = 1; i < n; i++) {
355+
if (nums[i] !== nums[i - 1]) {
356+
nums[m] = nums[i];
357+
m++;
358+
}
359+
}
360+
let ans = n;
361+
for (let i = 0, j = 0; i < m; i++) {
362+
while (j < m && nums[j] - nums[i] <= n - 1) {
363+
j++;
364+
}
365+
ans = Math.min(ans, n - (j - i));
366+
}
367+
return ans;
368+
}
369+
```
370+
371+
#### Rust
372+
373+
```rust
374+
impl Solution {
375+
pub fn min_operations(mut nums: Vec<i32>) -> i32 {
376+
nums.sort();
377+
let n = nums.len();
378+
if n == 0 {
379+
return 0;
380+
}
381+
let mut m = 1usize;
382+
for i in 1..n {
383+
if nums[i] != nums[i - 1] {
384+
nums[m] = nums[i];
385+
m += 1;
386+
}
387+
}
388+
let mut ans = n as i32;
389+
let mut j = 0usize;
390+
for i in 0..m {
391+
while j < m && nums[j] - nums[i] <= n as i32 - 1 {
392+
j += 1;
393+
}
394+
ans = ans.min(n as i32 - (j as i32 - i as i32));
395+
}
396+
ans
397+
}
398+
}
399+
```
400+
314401
<!-- tabs:end -->
315402

316403
<!-- solution:end -->
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
function minOperations(nums: number[]): number {
2+
const n = nums.length;
3+
nums.sort((a, b) => a - b);
4+
let m = 1;
5+
for (let i = 1; i < n; ++i) {
6+
if (nums[i] !== nums[i - 1]) {
7+
nums[m++] = nums[i];
8+
}
9+
}
10+
let ans = n;
11+
for (let i = 0; i < m; ++i) {
12+
const j = search(nums, nums[i] + n - 1, i, m);
13+
ans = Math.min(ans, n - (j - i));
14+
}
15+
return ans;
16+
}
17+
18+
function search(nums: number[], x: number, left: number, right: number): number {
19+
while (left < right) {
20+
const mid = (left + right) >> 1;
21+
if (nums[mid] > x) {
22+
right = mid;
23+
} else {
24+
left = mid + 1;
25+
}
26+
}
27+
return left;
28+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
impl Solution {
2+
pub fn min_operations(mut nums: Vec<i32>) -> i32 {
3+
nums.sort();
4+
let n = nums.len();
5+
if n == 0 {
6+
return 0;
7+
}
8+
let mut m = 1usize;
9+
for i in 1..n {
10+
if nums[i] != nums[i - 1] {
11+
nums[m] = nums[i];
12+
m += 1;
13+
}
14+
}
15+
let mut ans = n as i32;
16+
let mut j = 0usize;
17+
for i in 0..m {
18+
while j < m && nums[j] - nums[i] <= n as i32 - 1 {
19+
j += 1;
20+
}
21+
ans = ans.min(n as i32 - (j as i32 - i as i32));
22+
}
23+
ans
24+
}
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function minOperations(nums: number[]): number {
2+
nums.sort((a, b) => a - b);
3+
const n = nums.length;
4+
let m = 1;
5+
for (let i = 1; i < n; i++) {
6+
if (nums[i] !== nums[i - 1]) {
7+
nums[m] = nums[i];
8+
m++;
9+
}
10+
}
11+
let ans = n;
12+
for (let i = 0, j = 0; i < m; i++) {
13+
while (j < m && nums[j] - nums[i] <= n - 1) {
14+
j++;
15+
}
16+
ans = Math.min(ans, n - (j - i));
17+
}
18+
return ans;
19+
}

0 commit comments

Comments
 (0)