use std::collections::HashMap;

fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
    let mut num_map: HashMap<i32, i32> = HashMap::new();

    for (index, num) in nums.iter().enumerate() {
        let complement = target - num;
        if let Some(&complement_index) = num_map.get(&complement) {
            return vec![complement_index as i32, index as i32];
        }
        num_map.insert(*num, index as i32);
    }
    vec![]
}

fn main() {
    let nums = vec![2, 7, 11, 15];
    let target = 9;
    let result = two_sum(nums, target);
    println!("Indices: {:?}", result); // Output: Indices: [0, 1]

    let nums2 = vec![3, 2, 4];
    let target2 = 6;
    let result2 = two_sum(nums2, target2);
    println!("Indices: {:?}", result2); // Output: Indices: [1, 2]

    let nums3 = vec![3, 3];
    let target3 = 6;
    let result3 = two_sum(nums3, target3);
    println!("Indices: {:?}", result3); // Output: Indices: [0, 1]
}