[][src]Function leetcode_for_rust::cd0001_two_sum::two_sum

pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32>

Solutions

Approach 1: One-pass Hash Table

  • Time complexity: O(n)

  • Space complexity: O(n)

use std::collections::HashMap;

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        if nums.len() < 2 {
            return vec![];
        }

        let mut positon = HashMap::new();
        for(i, num) in nums.iter().enumerate() {
            if positon.contains_key(num) {
                return vec![positon[num] as i32, i as i32];
            } else {
                positon.insert(target - num, i);
            }
        }

        return vec![];
    }
}

Approach 2: Brute Force

  • Time complexity: O(n^2)

  • Space complexity: O(1)

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        if nums.len() < 2 {
            return vec![];
        }

        let mut v: Vec<i32> = vec![];
        for i in 0..nums.len() {
            let n = target - nums[i];
            for j in (i+1)..nums.len() {
                if n == nums[j] {
                    v.push(i as i32);
                    v.push(j as i32);
                    return v;
                }
            }
        }

        v
    }
}