Skip to main content

Google Coding Interview Questions

Review this list of 48 Google Coding interview questions and answers verified by hiring managers and candidates.
  • Google logoAsked at Google 
    43 answers
    Video answer for 'Edit distance'
    +35

    "from collections import deque def updateword(words, startword, end_word): if end_word not in words: return None # Early exit if end_word is not in the dictionary queue = deque([(start_word, 0)]) # (word, steps) visited = set([start_word]) # Keep track of visited words while queue: word, steps = queue.popleft() if word == end_word: return steps # Found the target word, return steps for i in range(len(word)): "

    叶 路. - "from collections import deque def updateword(words, startword, end_word): if end_word not in words: return None # Early exit if end_word is not in the dictionary queue = deque([(start_word, 0)]) # (word, steps) visited = set([start_word]) # Keep track of visited words while queue: word, steps = queue.popleft() if word == end_word: return steps # Found the target word, return steps for i in range(len(word)): "See full answer

    Software Engineer
    Coding
    +3 more
  • Google logoAsked at Google 
    44 answers
    +39

    "Was this for an entry level engineer role?"

    Yeshwanth D. - "Was this for an entry level engineer role?"See full answer

    Software Engineer
    Coding
    +4 more
  • +12

    "Would be better to adjust resolution in the video player directly."

    Anonymous Prawn - "Would be better to adjust resolution in the video player directly."See full answer

    Software Engineer
    Coding
    +4 more
  • Google logoAsked at Google 

    Tree Node.

    IDE
    Easy
    26 answers
    Video answer for 'Tree Node.'
    +22

    "-- Write your query here select id, (case when p_id is null then 'Root' when pid in (select id from treenode_table) and id in (select pid from treenode_table) then 'Inner' else 'Leaf' end) as node_types from treenodetable order by 1; `"

    Anonymous Roadrunner - "-- Write your query here select id, (case when p_id is null then 'Root' when pid in (select id from treenode_table) and id in (select pid from treenode_table) then 'Inner' else 'Leaf' end) as node_types from treenodetable order by 1; `"See full answer

    Software Engineer
    Coding
    +1 more
  • "2 Approaches: 1) The more intuitive approach is doing a multi-source BFS from all cats and storing the distance of closest cats. Then do a dfs/bfs from rat to bread. Time Complexity: O(mn + 4^L) where L is path length, worst case L could be mn Space Complexity: O(m*n) 2) The first approach should be fine for interviews. But if they ask to optimize it further, you can use Binary Search. Problems like "Finding max of min distance" or "Finding min of max" could be usually solved by BS. "

    Karan K. - "2 Approaches: 1) The more intuitive approach is doing a multi-source BFS from all cats and storing the distance of closest cats. Then do a dfs/bfs from rat to bread. Time Complexity: O(mn + 4^L) where L is path length, worst case L could be mn Space Complexity: O(m*n) 2) The first approach should be fine for interviews. But if they ask to optimize it further, you can use Binary Search. Problems like "Finding max of min distance" or "Finding min of max" could be usually solved by BS. "See full answer

    Software Engineer
    Coding
    +1 more
  • 🧠 Want an expert answer to a question? Saving questions lets us know what content to make next.

  • Google logoAsked at Google 
    34 answers
    +28

    "#inplace reversal without inbuilt functions def reverseString(s): chars = list(s) l, r = 0, len(s)-1 while l < r: chars[l],chars[r] = chars[r],chars[l] l += 1 r -= 1 reversed = "".join(chars) return reversed "

    Anonymous Possum - "#inplace reversal without inbuilt functions def reverseString(s): chars = list(s) l, r = 0, len(s)-1 while l < r: chars[l],chars[r] = chars[r],chars[l] l += 1 r -= 1 reversed = "".join(chars) return reversed "See full answer

    Software Engineer
    Coding
    +4 more
  • Google logoAsked at Google 
    57 answers
    Video answer for 'Merge Intervals'
    +49

    "const mergeIntervals = (intervals) => { const compare = (a, b) => { if(a[0] b[0]) return 1 else if(a[0] === b[0]) { return a[1] - b[1] } } let current = [] const result = [] const sorted = intervals.sort(compare) for(let i = 0; i = b[0]) current[1] = b[1] els"

    Kofi N. - "const mergeIntervals = (intervals) => { const compare = (a, b) => { if(a[0] b[0]) return 1 else if(a[0] === b[0]) { return a[1] - b[1] } } let current = [] const result = [] const sorted = intervals.sort(compare) for(let i = 0; i = b[0]) current[1] = b[1] els"See full answer

    Software Engineer
    Coding
    +6 more
  • Google logoAsked at Google 
    10 answers
    Video answer for 'Explain how to find a target sum in an array.'
    +6

    "a top-down recursive solution with memoization in python: from typing import List from functools import cache def changeSigns(nums: List[int], S: int) -> int: @cache def dp(i, curr_sum): if i == len(nums): if curr_sum == S: return 1 return 0 return dp(i+1, currsum + nums[i]) + dp(i+1, currsum - nums[i]) answer = dp(0, 0) if answer == 0: return -1 return answer `"

    Jessica R. - "a top-down recursive solution with memoization in python: from typing import List from functools import cache def changeSigns(nums: List[int], S: int) -> int: @cache def dp(i, curr_sum): if i == len(nums): if curr_sum == S: return 1 return 0 return dp(i+1, currsum + nums[i]) + dp(i+1, currsum - nums[i]) answer = dp(0, 0) if answer == 0: return -1 return answer `"See full answer

    Software Engineer
    Coding
    +1 more
  • Google logoAsked at Google 
    1 answer

    "These are a set of utilities used to manage the heap memory as part of an application. The C standard library implements these functions. malloc(bytes) takes a number of bytes and returns a pointer to the start of the allocated buffer. If the allocation failed, a null pointer is returned instead. calloc(count, size) behaves like malloc(count * size), but also zero-initializes the allocated buffer, assuming the allocation succeeded. realloc(ptr, size) takes a pointer to a previously al"

    J R. - "These are a set of utilities used to manage the heap memory as part of an application. The C standard library implements these functions. malloc(bytes) takes a number of bytes and returns a pointer to the start of the allocated buffer. If the allocation failed, a null pointer is returned instead. calloc(count, size) behaves like malloc(count * size), but also zero-initializes the allocated buffer, assuming the allocation succeeded. realloc(ptr, size) takes a pointer to a previously al"See full answer

    Software Engineer
    Coding
    +1 more
  • "Function signature for reference: def calculate(servers: List[int], k: int) -> int: ... To resolve this, you can use binary search considering left=0 and right=max(servers) * k so Example: servers=[1,4,5] First server handle 1 request in let's say 1 second, second 4 seconds and last 5 seconds. k=10 So I want to know the minimal time to process 10 requests Get the mid for timeline mid = (left+right)//2 -> mid is 25 Check how many we could process 25//1 = 25 25//4=6 25//5=5 so 25 + 6 +"

    Babaa - "Function signature for reference: def calculate(servers: List[int], k: int) -> int: ... To resolve this, you can use binary search considering left=0 and right=max(servers) * k so Example: servers=[1,4,5] First server handle 1 request in let's say 1 second, second 4 seconds and last 5 seconds. k=10 So I want to know the minimal time to process 10 requests Get the mid for timeline mid = (left+right)//2 -> mid is 25 Check how many we could process 25//1 = 25 25//4=6 25//5=5 so 25 + 6 +"See full answer

    Software Engineer
    Coding
  • Google logoAsked at Google 
    7 answers
    Video answer for 'Write functions to serialize and deserialize a list of strings.'
    +4

    "function serialize(list) { for (let i=0; i 0xFFFF) { throw new Exception(String ${list[i]} is too long!); } const prefix = String.fromCharCode(length); list[i] = ${prefix}${list[i]}; console.log(list[i]) } return list.join(''); } function deserialize(s) { let i=0; const length = s.length; const output = []; while (i < length) { "

    Tiago R. - "function serialize(list) { for (let i=0; i 0xFFFF) { throw new Exception(String ${list[i]} is too long!); } const prefix = String.fromCharCode(length); list[i] = ${prefix}${list[i]}; console.log(list[i]) } return list.join(''); } function deserialize(s) { let i=0; const length = s.length; const output = []; while (i < length) { "See full answer

    Software Engineer
    Coding
    +1 more
  • "I would assume that this is similar to an intervals question. Meeting Rooms II (https://www.lintcode.com/problem/919/?fromId=203&_from=collection) on Leetcode seems like the closest comparison, it's a premium question so I linked Lintcode. I'm assuming that we also need to just return the minimum number of cars used. You need to sort for the most optimal solution, so you're constrained by an O(nlogn) time complexity. So any sorting solution could work (using a heap, sorting the array input arra"

    Sohum S. - "I would assume that this is similar to an intervals question. Meeting Rooms II (https://www.lintcode.com/problem/919/?fromId=203&_from=collection) on Leetcode seems like the closest comparison, it's a premium question so I linked Lintcode. I'm assuming that we also need to just return the minimum number of cars used. You need to sort for the most optimal solution, so you're constrained by an O(nlogn) time complexity. So any sorting solution could work (using a heap, sorting the array input arra"See full answer

    Software Engineer
    Coding
    +1 more
  • +1

    "1 - Oder list of Kid Position and Sellers Positions (ascending) 2 - Implement a method to check distant 'e' for every kid pos (finding nearest seller and checking if sellerpos - currkid_pos < e, for all kid pos) 3 - Calculate mid from 0 to the 'max post' in between both kids and seller list: (max(max(k) -min(k), max(s) - min(s))) 4 - Perform binary search to find distance 'e' that satisfy step '2'"

    Alejandro C. - "1 - Oder list of Kid Position and Sellers Positions (ascending) 2 - Implement a method to check distant 'e' for every kid pos (finding nearest seller and checking if sellerpos - currkid_pos < e, for all kid pos) 3 - Calculate mid from 0 to the 'max post' in between both kids and seller list: (max(max(k) -min(k), max(s) - min(s))) 4 - Perform binary search to find distance 'e' that satisfy step '2'"See full answer

    Software Engineer
    Coding
    +1 more
  • Google logoAsked at Google 
    13 answers
    +10

    " class Node { constructor(data) { this.data = data; this.left = null; this.right = null; } } function diameterOfTree(root) { if (root === null || root.left === null & root.right === null) { return 0; } function countBranch(node, count) { if (node.left === null && node.right === null) { return count; } let left = node.left === null ? 0 : countBranch(node.left, count+1); let right = no"

    Jeff S. - " class Node { constructor(data) { this.data = data; this.left = null; this.right = null; } } function diameterOfTree(root) { if (root === null || root.left === null & root.right === null) { return 0; } function countBranch(node, count) { if (node.left === null && node.right === null) { return count; } let left = node.left === null ? 0 : countBranch(node.left, count+1); let right = no"See full answer

    Software Engineer
    Coding
    +2 more
  • Google logoAsked at Google 
    15 answers
    +10

    " function climbStairs(n) { // 4 iterations of Dynamic Programming solutions: // Step 1: Recursive: // if (n <= 2) return n // return climbStairs(n-1) + climbStairs(n-2) // Step 2: Top-down Memoization // const memo = {0:0, 1:1, 2:2} // function f(x) { // if (x in memo) return memo[x] // memo[x] = f(x-1) + f(x-2) // return memo[x] // } // return f(n) // Step 3: Bottom-up Tabulation // const tab = [0,1,2] // f"

    Matthew K. - " function climbStairs(n) { // 4 iterations of Dynamic Programming solutions: // Step 1: Recursive: // if (n <= 2) return n // return climbStairs(n-1) + climbStairs(n-2) // Step 2: Top-down Memoization // const memo = {0:0, 1:1, 2:2} // function f(x) { // if (x in memo) return memo[x] // memo[x] = f(x-1) + f(x-2) // return memo[x] // } // return f(n) // Step 3: Bottom-up Tabulation // const tab = [0,1,2] // f"See full answer

    Software Engineer
    Coding
    +3 more
  • Google logoAsked at Google 
    27 answers
    +23

    "def friend_distance(friends, userA, userB): step = 0 total_neighs = set() llen = len(total_neighs) total_neighs.add(userB) while len(total_neighs)!=llen: s = set() step += 1 llen = len(total_neighs) for el in total_neighs: nes = neighbours(friends, userA, el) if userA in nes: return step for p in nes: s.add(p) for el in s: total_neighs.add(el) return -1 def neighbours(A,n1, n2): out = set() for i in range(len(A[n2])): if An2: out.add(i) return out"

    Batman X. - "def friend_distance(friends, userA, userB): step = 0 total_neighs = set() llen = len(total_neighs) total_neighs.add(userB) while len(total_neighs)!=llen: s = set() step += 1 llen = len(total_neighs) for el in total_neighs: nes = neighbours(friends, userA, el) if userA in nes: return step for p in nes: s.add(p) for el in s: total_neighs.add(el) return -1 def neighbours(A,n1, n2): out = set() for i in range(len(A[n2])): if An2: out.add(i) return out"See full answer

    Software Engineer
    Coding
    +1 more
  • Google logoAsked at Google 
    5 answers
    +2

    "WITH RECURSIVE fibonacci_series AS ( SELECT 1 AS n, 0 AS fib1, 1 AS fib2 UNION ALL SELECT n + 1 AS n, fib2 AS fib1, fib1 + fib2 AS fib2 FROM fibonacci_series WHERE n < 20 -- Limit the series to 20 numbers ) SELECT n, fib1 AS fib FROM fibonacci_series ORDER BY n; `"

    Yashasvi V. - "WITH RECURSIVE fibonacci_series AS ( SELECT 1 AS n, 0 AS fib1, 1 AS fib2 UNION ALL SELECT n + 1 AS n, fib2 AS fib1, fib1 + fib2 AS fib2 FROM fibonacci_series WHERE n < 20 -- Limit the series to 20 numbers ) SELECT n, fib1 AS fib FROM fibonacci_series ORDER BY n; `"See full answer

    Data Analyst
    Coding
    +4 more
  • Google logoAsked at Google 
    27 answers
    +24

    "with cte as (select ts.employee_id, e.name, t.id as test_id, max(distinct ts.score) as total from test_results as ts join tests as t on ts.test_id = t.id join employees as e on ts.employee_id = e.id group by ts.employee_id, e.name, t.id) select employee_id, name as employee_name, sum(total) as total_score from cte group by employee_id, employee_name order by total_score desc, employee_id asc ;"

    Christian B. - "with cte as (select ts.employee_id, e.name, t.id as test_id, max(distinct ts.score) as total from test_results as ts join tests as t on ts.test_id = t.id join employees as e on ts.employee_id = e.id group by ts.employee_id, e.name, t.id) select employee_id, name as employee_name, sum(total) as total_score from cte group by employee_id, employee_name order by total_score desc, employee_id asc ;"See full answer

    Data Scientist
    Coding
    +3 more
  • Google logoAsked at Google 
    4 answers
    +1

    "You can ask some clarifying questions like 1) Ask if the list is already sorted or not 2) is zero included in the list ? 3) Natural numbers are usually positive numbers ( clarify they are non negatives) Solution : 1) If sorted use two pointers and sort them in O(N) 2) if not sorted , -ve / only +ve numbers in the list doesn't matter - the easiest solution is Use a priority queue and push the number and its square in each iteration Finally return the list returned by the priority Queue. N"

    Bless M. - "You can ask some clarifying questions like 1) Ask if the list is already sorted or not 2) is zero included in the list ? 3) Natural numbers are usually positive numbers ( clarify they are non negatives) Solution : 1) If sorted use two pointers and sort them in O(N) 2) if not sorted , -ve / only +ve numbers in the list doesn't matter - the easiest solution is Use a priority queue and push the number and its square in each iteration Finally return the list returned by the priority Queue. N"See full answer

    Machine Learning Engineer
    Coding
    +1 more
Showing 1-20 of 48
Exponent

Get updates in your inbox with the latest tips, job listings, and more.

Follow Us

Products
Courses
Interview Questions
Interview Experiences
Popular articles
Guides
Coaching
For Partners
Company
Exponent © 2026
Terms of Service | Privacy