Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Swim in Rising Water

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "778" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are given an n x n integer matrix grid where each value grid[i][j] represents the elevation at that point (i, j). The rain starts to fall. At time t, the depth of the water everywhere is t. You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most t. You can swim infinite distances in zero time. Of course, you must stay within the boundaries of the grid during your swim. Return the least time until you can reach the bottom right square (n - 1, n - 1) if you start at the top left square (0, 0). Example 1: Input: grid = [[0,2],[1,3]] Output: 3 Explanation: At time 0, you are in grid location (0, 0). You cannot go anywhere else because 4-directionally adjacent neighbors have a higher elevation than t = 0. You cannot reach point (1, 1) until time 3. When the depth of water is 3, we can swim anywhere inside the grid. Example 2: Input: grid = [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]] Output: 16 Explanation: The final route is shown. We need to wait until time 16 so that (0, 0) and (4, 4) are connected. Constraints: n == grid.length n == grid[i].length 1 <= n <= 50 0 <= grid[i][j] < n2 Each value grid[i][j] is unique.

Explanation

Here's a breakdown of the solution:

  • Binary Search: The answer lies within the range of possible elevation values (0 to n*n - 1). We can use binary search to efficiently find the minimum time t.
  • Connectivity Check (DFS/BFS): For a given time t, we need to check if it's possible to reach the bottom-right cell from the top-left cell. We can use either Depth-First Search (DFS) or Breadth-First Search (BFS) to traverse the grid, only visiting cells with elevations no greater than t.
  • Optimization: The search algorithm should stop as soon as the target cell has been reached

  • Runtime Complexity: O(n2 log n) due to the binary search (log n) and DFS/BFS (n2). Storage Complexity: O(n2) due to the visited array used in DFS/BFS.

Code

    def swimInWater(grid):
    n = len(grid)
    low = grid[0][0]
    high = n * n - 1
    ans = high

    def can_reach(time):
        visited = [[False] * n for _ in range(n)]
        q = [(0, 0)]
        visited[0][0] = True

        while q:
            r, c = q.pop(0)
            if r == n - 1 and c == n - 1:
                return True

            directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
            for dr, dc in directions:
                nr, nc = r + dr, c + dc
                if 0 <= nr < n and 0 <= nc < n and not visited[nr][nc] and grid[nr][nc] <= time:
                    q.append((nr, nc))
                    visited[nr][nc] = True
        return False

    while low <= high:
        mid = (low + high) // 2
        if can_reach(mid):
            ans = mid
            high = mid - 1
        else:
            low = mid + 1

    return ans

More from this blog

C

Chatmagic blog

2894 posts