Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Evaluate Division

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "399" 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 array of variable pairs equations and an array of real numbers values, where equations[i] = [Ai, Bi] and values[i] represent the equation Ai / Bi = values[i]. Each Ai or Bi is a string that represents a single variable. You are also given some queries, where queries[j] = [Cj, Dj] represents the jth query where you must find the answer for Cj / Dj = ?. Return the answers to all queries. If a single answer cannot be determined, return -1.0. Note: The input is always valid. You may assume that evaluating the queries will not result in division by zero and that there is no contradiction. Note: The variables that do not occur in the list of equations are undefined, so the answer cannot be determined for them. Example 1: Input: equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]] Output: [6.00000,0.50000,-1.00000,1.00000,-1.00000] Explanation: Given: a / b = 2.0, b / c = 3.0 queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? return: [6.0, 0.5, -1.0, 1.0, -1.0 ] note: x is undefined => -1.0 Example 2: Input: equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]] Output: [3.75000,0.40000,5.00000,0.20000] Example 3: Input: equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]] Output: [0.50000,2.00000,-1.00000,-1.00000] Constraints: 1 <= equations.length <= 20 equations[i].length == 2 1 <= Ai.length, Bi.length <= 5 values.length == equations.length 0.0 < values[i] <= 20.0 1 <= queries.length <= 20 queries[i].length == 2 1 <= Cj.length, Dj.length <= 5 Ai, Bi, Cj, Dj consist of lower case English letters and digits.

Explanation

Here's a breakdown of the approach, followed by the Python code:

  • Build a Graph: Represent the equations as a graph where nodes are variables, and edges represent the division relationships (A/B = value becomes an edge from A to B with weight 'value', and an edge from B to A with weight 1/value).
  • Depth-First Search (DFS): For each query, use DFS to traverse the graph from the starting variable to the ending variable. Multiply the edge weights along the path to find the result.
  • Handle Undefined Cases: If a variable is not in the graph or no path is found between the query variables, return -1.0.

  • Runtime Complexity: O(Q * (V + E)), where Q is the number of queries, V is the number of variables, and E is the number of equations. In this problem, V and E are both bounded by 20, but the general case is shown here.

  • Storage Complexity: O(V + E), for storing the graph.

Code

    def calcEquation(equations, values, queries):
    graph = {}
    for (A, B), value in zip(equations, values):
        if A not in graph:
            graph[A] = {}
        if B not in graph:
            graph[B] = {}
        graph[A][B] = value
        graph[B][A] = 1.0 / value

    def dfs(start, end, visited):
        if start not in graph or end not in graph:
            return -1.0
        if start == end:
            return 1.0
        visited.add(start)
        for neighbor, value in graph[start].items():
            if neighbor not in visited:
                result = dfs(neighbor, end, visited)
                if result != -1.0:
                    return value * result
        return -1.0

    results = []
    for C, D in queries:
        results.append(dfs(C, D, set()))
    return results

More from this blog

C

Chatmagic blog

2894 posts