diff --git a/commit.sh b/commit.sh new file mode 100755 index 0000000..506d674 --- /dev/null +++ b/commit.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +time=$(date "+%Y%m%d") +message="$time Finished" + +git add -A +git commit -m "$message" + +git push diff --git a/src/problem/mod.rs b/src/problem/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/solution/mod.rs b/src/solution/mod.rs new file mode 100644 index 0000000..1c261c7 --- /dev/null +++ b/src/solution/mod.rs @@ -0,0 +1 @@ +mod s0001_two_sum; diff --git a/src/solution/s0001_two_sum.rs b/src/solution/s0001_two_sum.rs new file mode 100644 index 0000000..bf5203c --- /dev/null +++ b/src/solution/s0001_two_sum.rs @@ -0,0 +1,73 @@ +/** + * [1] Two Sum + * + * Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. + * You may assume that each input would have exactly one solution, and you may not use the same element twice. + * You can return the answer in any order. + * + * Example 1: + * + * Input: nums = [2,7,11,15], target = 9 + * Output: [0,1] + * Explanation: Because nums[0] + nums[1] == 9, we return [0, 1]. + * + * Example 2: + * + * Input: nums = [3,2,4], target = 6 + * Output: [1,2] + * + * Example 3: + * + * Input: nums = [3,3], target = 6 + * Output: [0,1] + * + * + * Constraints: + * + * 2 <= nums.length <= 10^4 + * -10^9 <= nums[i] <= 10^9 + * -10^9 <= target <= 10^9 + * Only one valid answer exists. + * + * + * Follow-up: Can you come up with an algorithm that is less than O(n^2) time complexity? + */ +pub struct Solution {} + +// problem: https://leetcode.cn/problems/two-sum/ +// discuss: https://leetcode.cn/problems/two-sum/discuss/?currentPage=1&orderBy=most_votes&query= + +// submission codes start here + +use std::collections::HashMap; +impl Solution { + pub fn two_sum(nums: Vec, target: i32) -> Vec { + let mut map = HashMap::with_capacity(nums.len()); + + for (index, value) in nums.iter().enumerate() { + match map.get(&(target - value)) { + None => { + map.insert(value, index); + } + Some(target_index) => { + return vec![*target_index as i32, index as i32]; + } + } + } + + vec![] + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1() { + assert_eq!(vec![0, 1], Solution::two_sum(vec![2, 7, 11, 15], 9)); + assert_eq!(vec![1, 2], Solution::two_sum(vec![3, 2, 4], 6)); + } +}