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.R
arr <- c(2, 7, 11, 4, 5)
target <- 9
seen <- new.env(hash = TRUE, parent = emptyenv())
first <- -1
second <- -1
i <- 1
while (i <= length(arr)) {
  value <- arr[i]
  need <- target - value
  key <- as.character(need)
  if (exists(key, envir = seen, inherits = FALSE)) {
    first <- get(key, envir = seen)
    second <- i - 1
    break
  }
  assign(as.character(value), i - 1, envir = seen)
  i <- i + 1
}
cat("[", first, ", ", second, "]\n", sep = "")

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 R DSA version keeps the same data and final output as every other DSA book in this wave.