Walk the array once, storing seen values in a lookup table. When the complement is already present, the result indices are known.

Algorithm

Basic Implementation

basic.rs
fn main() {
	let arr = [2, 7, 11, 4, 5];
	let target = 9;
	let mut seen = std::collections::HashMap::new();
	let mut result = (-1, -1);
	for (i, value) in arr.iter().enumerate() {
		let need = target - value;
		if let Some(j) = seen.get(&need) {
			result = (*j as i32, i as i32);
			break;
		}
		seen.insert(*value, i);
	}
	println!("[{}, {}]", result.0, result.1);
}

Complexity

  • Time: O(n) average
  • Space: O(n)

Implementation notes

  • Keep the explicit control flow. Library shortcuts would hide the state changes this lesson is meant to replay.
  • The final output is intentionally small and deterministic for cross-language comparison.
execution replay The checked-in replay follows the language-neutral state table for `array-two-sum-hash`.
cross-language comparison This Rust DSA version keeps the same data and final output as every other DSA book in this wave.