Skip to main content
Back to problems
#3242
Easy Algorithms

Design neighbor sum service

Array Hash Table Design Matrix Simulation
76.4% acceptance
Feb 25, 2026
117
19
You are given a n x n 2D array grid containing distinct elements in the range [0, n2 - 1]. Implement the NeighborSum class: NeighborSum(int [][]grid) initializes the object. int adjacentSum(int value) returns the sum of elements which are adjacent neighbors of value. int diagonalSum(int value) returns the sum of elements which are diagonal neighbors of value.

Solution

Rust
Time O(n²)
Space O(n)
LeetCode
solution.rs
pub struct NeighborSum {
  // pos[v] = (row, col) for value v
  pos: Vec<(i32, i32)>,
  grid: Vec<Vec<i32>>,
  n: i32,
}

impl NeighborSum {
  pub fn new(grid: Vec<Vec<i32>>) -> Self {
    let n = grid.len();
    let mut pos = vec![(0i32, 0i32); n * n];
    for i in 0..n {
      for j in 0..n {
        pos[grid[i][j] as usize] = (i as i32, j as i32);
      }
    }
    NeighborSum { pos, grid, n: n as i32 }
  }

  pub fn adjacent_sum(&self, value: i32) -> i32 {
    let (r, c) = self.pos[value as usize];
    let dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)];
    let mut sum = 0;
    for (dr, dc) in dirs {
      let nr = r + dr;
      let nc = c + dc;
      if nr >= 0 && nr < self.n && nc >= 0 && nc < self.n {
        sum += self.grid[nr as usize][nc as usize];
      }
    }
    sum
  }

  pub fn diagonal_sum(&self, value: i32) -> i32 {
    let (r, c) = self.pos[value as usize];
    let dirs = [(-1, -1), (-1, 1), (1, -1), (1, 1)];
    let mut sum = 0;
    for (dr, dc) in dirs {
      let nr = r + dr;
      let nc = c + dc;
      if nr >= 0 && nr < self.n && nc >= 0 && nc < self.n {
        sum += self.grid[nr as usize][nc as usize];
      }
    }
    sum
  }
}