Skip to content

Commit 833b430

Browse files
committed
feat: add solutions to lc problems: No.2215,2216,2217
- No.2215.Find the Difference of Two Arrays - No.2216.Minimum Deletions to Make Array Beautiful - No.2217.Find Palindrome With Fixed Length
1 parent eaf14ba commit 833b430

File tree

13 files changed

+460
-20
lines changed

13 files changed

+460
-20
lines changed

solution/2200-2299/2215.Find the Difference of Two Arrays/README.md

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ class Solution {
100100
}
101101
```
102102

103-
### **TypeScript**
103+
### **JavaScript**
104104

105-
```ts
105+
```js
106106
/**
107107
* @param {number[]} nums1
108108
* @param {number[]} nums2
@@ -121,6 +121,17 @@ var findDifference = function (nums1, nums2) {
121121
};
122122
```
123123

124+
### **TypeScript**
125+
126+
```ts
127+
function findDifference(nums1: number[], nums2: number[]): number[][] {
128+
return [
129+
[...new Set<number>(nums1.filter(v => !nums2.includes(v)))],
130+
[...new Set<number>(nums2.filter(v => !nums1.includes(v)))],
131+
];
132+
}
133+
```
134+
124135
### **C++**
125136

126137
```cpp
@@ -167,6 +178,61 @@ func findDifference(nums1 []int, nums2 []int) [][]int {
167178
}
168179
```
169180

181+
### **Rust**
182+
183+
```rust
184+
use std::collections::HashSet;
185+
impl Solution {
186+
pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {
187+
vec![
188+
nums1
189+
.iter()
190+
.filter_map(|&v| if nums2.contains(&v) { None } else { Some(v) })
191+
.collect::<HashSet<i32>>()
192+
.into_iter()
193+
.collect(),
194+
nums2
195+
.iter()
196+
.filter_map(|&v| if nums1.contains(&v) { None } else { Some(v) })
197+
.collect::<HashSet<i32>>()
198+
.into_iter()
199+
.collect(),
200+
]
201+
}
202+
}
203+
```
204+
205+
```rust
206+
impl Solution {
207+
pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {
208+
const N: usize = 2001;
209+
let to_index = |i| i as usize + 1000;
210+
211+
let mut is_in_nums1 = [false; N];
212+
let mut is_in_nums2 = [false; N];
213+
let mut res1 = vec![];
214+
let mut res2 = vec![];
215+
for &num in nums1.iter() {
216+
is_in_nums1[to_index(num)] = true;
217+
}
218+
for &num in nums2.iter() {
219+
is_in_nums2[to_index(num)] = true;
220+
if !is_in_nums1[to_index(num)] {
221+
res2.push(num);
222+
is_in_nums1[to_index(num)] = true;
223+
}
224+
}
225+
for &num in nums1.iter() {
226+
if !is_in_nums2[to_index(num)] {
227+
res1.push(num);
228+
is_in_nums2[to_index(num)] = true;
229+
}
230+
}
231+
vec![res1, res2]
232+
}
233+
}
234+
```
235+
170236
### **...**
171237

172238
```

solution/2200-2299/2215.Find the Difference of Two Arrays/README_EN.md

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Solution {
6161
public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
6262
Set<Integer> s1 = convert(nums1);
6363
Set<Integer> s2 = convert(nums2);
64-
64+
6565
List<List<Integer>> ans = new ArrayList<>();
6666
List<Integer> l1 = new ArrayList<>();
6767
List<Integer> l2 = new ArrayList<>();
@@ -90,9 +90,9 @@ class Solution {
9090
}
9191
```
9292

93-
### **TypeScript**
93+
### **JavaScript**
9494

95-
```ts
95+
```js
9696
/**
9797
* @param {number[]} nums1
9898
* @param {number[]} nums2
@@ -111,6 +111,17 @@ var findDifference = function (nums1, nums2) {
111111
};
112112
```
113113

114+
### **TypeScript**
115+
116+
```ts
117+
function findDifference(nums1: number[], nums2: number[]): number[][] {
118+
return [
119+
[...new Set<number>(nums1.filter(v => !nums2.includes(v)))],
120+
[...new Set<number>(nums2.filter(v => !nums1.includes(v)))],
121+
];
122+
}
123+
```
124+
114125
### **C++**
115126

116127
```cpp
@@ -157,6 +168,61 @@ func findDifference(nums1 []int, nums2 []int) [][]int {
157168
}
158169
```
159170

171+
### **Rust**
172+
173+
```rust
174+
use std::collections::HashSet;
175+
impl Solution {
176+
pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {
177+
vec![
178+
nums1
179+
.iter()
180+
.filter_map(|&v| if nums2.contains(&v) { None } else { Some(v) })
181+
.collect::<HashSet<i32>>()
182+
.into_iter()
183+
.collect(),
184+
nums2
185+
.iter()
186+
.filter_map(|&v| if nums1.contains(&v) { None } else { Some(v) })
187+
.collect::<HashSet<i32>>()
188+
.into_iter()
189+
.collect(),
190+
]
191+
}
192+
}
193+
```
194+
195+
```rust
196+
impl Solution {
197+
pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {
198+
const N: usize = 2001;
199+
let to_index = |i| i as usize + 1000;
200+
201+
let mut is_in_nums1 = [false; N];
202+
let mut is_in_nums2 = [false; N];
203+
let mut res1 = vec![];
204+
let mut res2 = vec![];
205+
for &num in nums1.iter() {
206+
is_in_nums1[to_index(num)] = true;
207+
}
208+
for &num in nums2.iter() {
209+
is_in_nums2[to_index(num)] = true;
210+
if !is_in_nums1[to_index(num)] {
211+
res2.push(num);
212+
is_in_nums1[to_index(num)] = true;
213+
}
214+
}
215+
for &num in nums1.iter() {
216+
if !is_in_nums2[to_index(num)] {
217+
res1.push(num);
218+
is_in_nums2[to_index(num)] = true;
219+
}
220+
}
221+
vec![res1, res2]
222+
}
223+
}
224+
```
225+
160226
### **...**
161227

162228
```
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @param {number[]} nums1
3+
* @param {number[]} nums2
4+
* @return {number[][]}
5+
*/
6+
var findDifference = function (nums1, nums2) {
7+
let ans1 = new Set(nums1),
8+
ans2 = new Set(nums2);
9+
for (let num of nums1) {
10+
ans2.delete(num);
11+
}
12+
for (let num of nums2) {
13+
ans1.delete(num);
14+
}
15+
return [Array.from(ans1), Array.from(ans2)];
16+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use std::collections::HashSet;
2+
impl Solution {
3+
pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {
4+
vec![
5+
nums1
6+
.iter()
7+
.filter_map(|&v| if nums2.contains(&v) { None } else { Some(v) })
8+
.collect::<HashSet<i32>>()
9+
.into_iter()
10+
.collect(),
11+
nums2
12+
.iter()
13+
.filter_map(|&v| if nums1.contains(&v) { None } else { Some(v) })
14+
.collect::<HashSet<i32>>()
15+
.into_iter()
16+
.collect(),
17+
]
18+
}
19+
}
Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
/**
2-
* @param {number[]} nums1
3-
* @param {number[]} nums2
4-
* @return {number[][]}
5-
*/
6-
var findDifference = function(nums1, nums2) {
7-
let ans1 = new Set(nums1), ans2 = new Set(nums2);
8-
for (let num of nums1) {
9-
ans2.delete(num);
10-
}
11-
for (let num of nums2) {
12-
ans1.delete(num);
13-
}
14-
return [Array.from(ans1), Array.from(ans2)];
15-
};
1+
function findDifference(nums1: number[], nums2: number[]): number[][] {
2+
return [
3+
[...new Set<number>(nums1.filter(v => !nums2.includes(v)))],
4+
[...new Set<number>(nums2.filter(v => !nums1.includes(v)))],
5+
];
6+
}

solution/2200-2299/2216.Minimum Deletions to Make Array Beautiful/README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,24 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50+
不需要修改数组,只统计不符合规则的元素数量即可。
51+
52+
```txt
53+
COUNT(A){
54+
n = A.length
55+
i = 0
56+
r = 0
57+
while i < n - 1
58+
if nums[i] == nums[i + 1]
59+
r += 1
60+
i += 1
61+
else
62+
i += 2
63+
return r
64+
```
65+
66+
完成统计后,计算删除元素之后的数组长度是否为奇数,若为奇数,还需要进行一次删除(返回值 + 1)。
67+
5068
<!-- tabs:start -->
5169

5270
### **Python3**
@@ -68,7 +86,47 @@
6886
### **TypeScript**
6987

7088
```ts
89+
function minDeletion(nums: number[]): number {
90+
const n = nums.length;
91+
let res = 0;
92+
let i = 0;
93+
while (i < n - 1) {
94+
if (nums[i] === nums[i + 1]) {
95+
i++;
96+
res++;
97+
} else {
98+
i += 2;
99+
}
100+
}
101+
if ((n - res) % 2 === 1) {
102+
res++;
103+
}
104+
return res;
105+
}
106+
```
71107

108+
### **Rust**
109+
110+
```rust
111+
impl Solution {
112+
pub fn min_deletion(nums: Vec<i32>) -> i32 {
113+
let n = nums.len();
114+
let mut res = 0;
115+
let mut i = 0;
116+
while i < n - 1 {
117+
if nums[i] == nums[i + 1] {
118+
res += 1;
119+
i += 1;
120+
} else {
121+
i += 2;
122+
}
123+
}
124+
if (n - res) % 2 == 1 {
125+
res += 1;
126+
}
127+
res as i32
128+
}
129+
}
72130
```
73131

74132
### **...**

solution/2200-2299/2216.Minimum Deletions to Make Array Beautiful/README_EN.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,47 @@
6161
### **TypeScript**
6262

6363
```ts
64+
function minDeletion(nums: number[]): number {
65+
const n = nums.length;
66+
let res = 0;
67+
let i = 0;
68+
while (i < n - 1) {
69+
if (nums[i] === nums[i + 1]) {
70+
i++;
71+
res++;
72+
} else {
73+
i += 2;
74+
}
75+
}
76+
if ((n - res) % 2 === 1) {
77+
res++;
78+
}
79+
return res;
80+
}
81+
```
6482

83+
### **Rust**
84+
85+
```rust
86+
impl Solution {
87+
pub fn min_deletion(nums: Vec<i32>) -> i32 {
88+
let n = nums.len();
89+
let mut res = 0;
90+
let mut i = 0;
91+
while i < n - 1 {
92+
if nums[i] == nums[i + 1] {
93+
res += 1;
94+
i += 1;
95+
} else {
96+
i += 2;
97+
}
98+
}
99+
if (n - res) % 2 == 1 {
100+
res += 1;
101+
}
102+
res as i32
103+
}
104+
}
65105
```
66106

67107
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
impl Solution {
2+
pub fn min_deletion(nums: Vec<i32>) -> i32 {
3+
let n = nums.len();
4+
let mut res = 0;
5+
let mut i = 0;
6+
while i < n - 1 {
7+
if nums[i] == nums[i + 1] {
8+
res += 1;
9+
i += 1;
10+
} else {
11+
i += 2;
12+
}
13+
}
14+
if (n - res) % 2 == 1 {
15+
res += 1;
16+
}
17+
res as i32
18+
}
19+
}

0 commit comments

Comments
 (0)