| @@ -0,0 +1,22 @@ | |||
| use std::collections::HashMap; | |||
| // I'm fairly sure there's a better more mathsy way of doing this but I can't work it out yet. | |||
| pub fn single_number(nums: Vec<i32>) -> i32 { | |||
| let mut hm = HashMap::<i32, i32>::new(); | |||
| for n in nums { | |||
| if hm.contains_key(&n) { | |||
| hm.remove(&n); | |||
| } else { | |||
| hm.insert(n, 0); | |||
| } | |||
| } | |||
| match hm.keys().next() { | |||
| Some(i) => *i, | |||
| _ => 0 | |||
| } | |||
| } | |||
| pub fn main() { | |||
| println!("Expected: 1"); | |||
| println!("Got: {}", single_number(vec![1, 2, 3, 4, 3, 4, 2])); | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| Given a non-empty array of integers, every element appears twice except for one. Find that single one. | |||
| Note: | |||
| Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? | |||
| Example 1: | |||
| Input: [2,2,1] | |||
| Output: 1 | |||
| Example 2: | |||
| Input: [4,1,2,1,2] | |||
| Output: 4 | |||
| @@ -0,0 +1,5 @@ | |||
| #!/bin/bash | |||
| rustc main.rs | |||
| ./main | |||
| rm main | |||