Skip to content

Commit 0f951eb

Browse files
authored
Merge pull request #14 from jtr109/1-two-sum
1 two sum
2 parents 24883c5 + 1b9fc96 commit 0f951eb

File tree

5 files changed

+74
-0
lines changed

5 files changed

+74
-0
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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ members = [
55
"reverse_integer",
66
"three_sum",
77
"binary_tree_postorder_traversal",
8+
"two_sum",
89
]

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ Resolving problems of LeetCode in RustLang.
77

88
## Solutions
99

10+
* [1. Two Sum](./two_sum/src/lib.rs)
1011
* [7. Reverse Integer](./reverse_integer/src/lib.rs)
1112
* [15. 3 Sum](./three_sum/src/lib.rs)
1213
* [215. Kth Largest Element in an Array](./kth_largest/src/lib.rs)
14+
* [145. Binary Tree Postorder Traversal](./binary_tree_postorder_traversal/src/lib.rs)
1315

1416
## Document
1517

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+
authors = ["Ryan Li <conbas2019@gmail.com>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

two_sum/src/lib.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*!
2+
* # 1. Two Sum
3+
*
4+
* * [Problem link](https://leetcode.com/problems/two-sum/)
5+
*/
6+
7+
#![allow(dead_code)]
8+
9+
struct Solution {}
10+
11+
// ----------------------------------------------------------------------------
12+
#[derive(Eq, Ord, PartialOrd, PartialEq)]
13+
struct Number {
14+
index: usize,
15+
value: i32,
16+
}
17+
18+
impl Number {
19+
fn new(index: usize, value: i32) -> Self {
20+
Number { index, value }
21+
}
22+
}
23+
24+
impl Solution {
25+
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
26+
let mut sorted = nums
27+
.iter()
28+
.enumerate()
29+
.map(|(index, &value)| Number::new(index, value))
30+
.collect::<Vec<Number>>();
31+
sorted.sort_by(|a, b| a.value.cmp(&b.value));
32+
let (mut low, mut high) = (0, sorted.len() - 1);
33+
while low < high {
34+
let s = sorted[low].value + sorted[high].value;
35+
if s == target {
36+
return vec![sorted[low].index as i32, sorted[high].index as i32];
37+
} else if s < target {
38+
low += 1;
39+
} else {
40+
high -= 1;
41+
}
42+
}
43+
panic!("no match");
44+
}
45+
}
46+
47+
#[cfg(test)]
48+
mod tests {
49+
use super::*;
50+
51+
#[test]
52+
fn test_example() {
53+
let nums = vec![2, 7, 11, 15];
54+
let target = 9;
55+
let expected = vec![0, 1];
56+
assert_eq!(Solution::two_sum(nums, target), expected);
57+
}
58+
}

0 commit comments

Comments
 (0)