Skip to content

Commit caed2d0

Browse files
committed
Add leetcode problem 350
1 parent c7a3dbe commit caed2d0

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package leetcode
2+
3+
import (
4+
"slices"
5+
)
6+
7+
func intersect(nums1 []int, nums2 []int) []int {
8+
slices.Sort(nums1)
9+
slices.Sort(nums2)
10+
11+
i := 0
12+
j := 0
13+
m := len(nums1)
14+
n := len(nums2)
15+
var res []int
16+
17+
for i < m && j < n {
18+
if nums1[i] < nums2[j] {
19+
i++
20+
} else if nums1[i] > nums2[j] {
21+
j++
22+
} else {
23+
res = append(res, nums1[i])
24+
i++
25+
j++
26+
}
27+
}
28+
return res
29+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use std::collections::HashMap;
2+
3+
struct Solution;
4+
5+
impl Solution {
6+
pub fn intersect(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> {
7+
let mut freq = nums1
8+
.into_iter()
9+
.fold(HashMap::<i32, usize>::new(), |mut map, x| {
10+
*map.entry(x).or_default() += 1;
11+
map
12+
});
13+
let mut res = Vec::new();
14+
15+
for num in nums2.iter() {
16+
if let Some(cnt) = freq.get_mut(num) {
17+
if *cnt > 0 {
18+
res.push(*num);
19+
*cnt -= 1;
20+
}
21+
}
22+
}
23+
24+
res
25+
}
26+
}
27+
28+
#[cfg(test)]
29+
mod tests {
30+
use super::*;
31+
32+
#[test]
33+
fn test() {
34+
let nums1 = vec![1, 2, 2, 1];
35+
let nums2 = vec![2, 2];
36+
let mut actual = Solution::intersect(nums1, nums2);
37+
actual.sort_unstable();
38+
assert_eq!(actual, vec![2, 2]);
39+
40+
let nums1 = vec![4, 9, 5];
41+
let nums2 = vec![9, 4, 9, 8, 4];
42+
let mut actual = Solution::intersect(nums1, nums2);
43+
actual.sort_unstable();
44+
assert_eq!(actual, vec![4, 9]);
45+
}
46+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestIntersect(t *testing.T) {
11+
tests := []struct {
12+
nums1 []int
13+
nums2 []int
14+
15+
expected []int
16+
}{
17+
{[]int{1, 2, 2, 1}, []int{2, 2}, []int{2, 2}},
18+
{[]int{4, 9, 5}, []int{9, 4, 9, 8, 4}, []int{4, 9}},
19+
}
20+
21+
for i, tt := range tests {
22+
tt := tt
23+
t.Run(fmt.Sprintf("Test %d", i), func(t *testing.T) {
24+
t.Parallel()
25+
actual := intersect(tt.nums1, tt.nums2)
26+
assert.ElementsMatch(t, tt.expected, actual)
27+
})
28+
}
29+
}

leetcode/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,3 +1418,6 @@ mod asteroid_collision;
14181418

14191419
#[path = "01550_three_consecutive_odds/solution.rs"]
14201420
mod three_consecutive_odds;
1421+
1422+
#[path = "00350_intersection_of_two_arrays_ii/solution.rs"]
1423+
mod intersection_of_two_arrays_ii;

0 commit comments

Comments
 (0)