Skip to content

Commit 37eb871

Browse files
committed
solution of two_sum
1 parent cc4c4b4 commit 37eb871

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@ pedantic = "warn"
33
nursery = "warn"
44

55
[workspace]
6-
members = ["crates/contains_duplicate", "crates/valid_anagram"]
6+
members = [
7+
"crates/contains_duplicate",
8+
"crates/two_sum",
9+
"crates/valid_anagram",
10+
]
711
resolver = "2"

crates/two_sum/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "two_sum"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
8+
[lints]
9+
workspace = true

crates/two_sum/src/lib.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use std::collections::HashMap;
2+
3+
#[must_use]
4+
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
5+
let mut map = HashMap::new();
6+
7+
for (i, number) in nums.into_iter().enumerate() {
8+
let diff = target - number;
9+
10+
if let Some(&j) = map.get(&diff) {
11+
#[allow(clippy::cast_possible_truncation, clippy::cast_possible_wrap)]
12+
return vec![i as i32, j as i32];
13+
}
14+
15+
map.insert(number, i);
16+
}
17+
18+
unreachable!()
19+
}
20+
21+
#[cfg(test)]
22+
mod tests {
23+
use super::*;
24+
25+
#[test]
26+
fn case_1() {
27+
let result = two_sum(vec![2, 7, 11, 15], 9);
28+
assert_eq!(result, [0, 1]);
29+
}
30+
31+
#[test]
32+
fn case_2() {
33+
let result = two_sum(vec![3, 2, 4], 6);
34+
assert_eq!(result, [1, 2]);
35+
}
36+
37+
#[test]
38+
fn case_3() {
39+
let result = two_sum(vec![3, 3], 6);
40+
assert_eq!(result, [0, 1]);
41+
}
42+
}

0 commit comments

Comments
 (0)