Your comprehensive resource to prepare for Amazon’s coding interview questions in 2025, featuring the top 15 questions, detailed solutions, and strategic insights.
Top Amazon Coding Interview Questions
1. Two Sum — Utilize a hash map for O(n) time complexity.
2. Longest Substring Without Repeating Characters — Apply the sliding window technique.
3. Merge Intervals — Sort and merge overlapping intervals.
4. Kth Largest Element — Implement using a min-heap.
5. LRU Cache — Combine a hash map with a doubly linked list for O(1) operations.
Introduction : Cracking the Top Amazon Coding Interview Questions 2025
Amazon coding interview questions are designed to assess your problem-solving abilities, understanding of data structures and algorithms, and coding proficiency.
This guide compiles the 15 most frequently asked Amazon Coding Interview Questions , complete with Python solutions, explanations, time and space complexity analyses, and links to external resources for further practice.
Top Amazon Coding Interview Questions List
1. Two Sum
Problem: Given an array nums and a target sum target, return indices of the two numbers that add up to the target.
Approach:
Use a hash map to store complements as you iterate.
def two_sum(nums, target):
lookup = {}
for i, num in enumerate(nums):
if target – num in lookup:
return [lookup[target – num], i]
lookup[num] = i
Time Complexity: O(n)
Space Complexity: O(n)
External Resource: Two Sum – LeetCode
Also Read : 20 IBM Coding Questions with Answers (Assessment by Expert)
2. Longest Substring Without Repeating Characters
Problem: Find the length of the longest substring without repeating characters.
Approach:
Use the sliding window technique with a hash map to track characters.
def length_of_longest_substring(s):
char_index = {}
start = max_length = 0
for end, char in enumerate(s):
if char in char_index and char_index[char] >= start:
start = char_index[char] + 1
char_index[char] = end
max_length = max(max_length, end – start + 1)
return max_length
Time Complexity: O(n)
Space Complexity: O(min(m, n)) where m is the size of the character set.
3. Merge Intervals
Problem: Given a collection of intervals, merge all overlapping intervals.
Approach:
Sort the intervals based on the start time and merge overlapping intervals.
def merge(intervals):
intervals.sort(key=lambda x: x[0])
merged = []
for interval in intervals:
if not merged or merged[-1][1] < interval[0]:
merged.append(interval)
else:
merged[-1][1] = max(merged[-1][1], interval[1])
return merged
Time Complexity: O(n log n)
Space Complexity: O(n)
External Resource: Merge Intervals – LeetCode
—
4. Kth Largest Element in an Array
Problem: Find the kth largest element in an unsorted array.
Approach:
Use a min-heap of size k to keep track of the k largest elements.
import heapq
def find_kth_largest(nums, k):
heap = nums[:k]
heapq.heapify(heap)
for num in nums[k:]:
if num > heap[0]:
heapq.heappushpop(heap, num)
return heap[0]
Time Complexity: O(n log k)
Space Complexity: O(k)
External Resource: Kth Largest Element in an Array – LeetCode
—
5. LRU Cache
Problem: Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.
Approach:
Combine a hash map with a doubly linked list to achieve O(1) time complexity for get and put operations.
class Node:
def __init__(self, key, val):
self.key, self.val = key, val
self.prev = self.next = None
class LRUCache:
def __init__(self, capacity):
self.cap = capacity
self.cache = {}
self.head, self.tail = Node(0,0), Node(0,0)
self.head.next, self.tail.prev = self.tail, self.head
def _remove(self, node):
prev, nxt = node.prev, node.next
prev.next, nxt.prev = nxt, prev
def _add(self, node):
prev, nxt = self.tail.prev, self.tail
prev.next = nxt.prev = node
node.prev, node.next = prev, nxt
def get(self, key):
if key in self.cache:
node = self.cache[key]
self._remove(node)
self._add(node)
return node.val
return -1
def put(self, key, val):
if key in self.cache:
self._remove(self.cache[key])
node = Node(key, val)
self._add(node)
self.cache[key] = node
if len(self.cache) > self.cap:
lru = self.head.next
self._remove(lru)
del self.cache[lru.key]
Time Complexity: O(1) for both get and put operations
Space Complexity: O(capacity)
External Resource: LRU Cache – LeetCode
—
6. Minimum Window Substring
Problem: Given two strings s and t, return the minimum window in s which will contain all the characters in t.
Approach:
Use the sliding window technique with a hash map to track character frequencies.
from collections import Counter
def min_window(s, t):
if not t or not s:
return “”
dict_t = Counter(t)
required = len(dict_t)
l, r = 0, 0
formed = 0
window_counts = {}
ans = float(“inf”), None, None
while r < len(s):
c = s[r]
window_counts[c] = window_counts.get(c, 0) + 1
if c in dict_t and window_counts[c] == dict_t[c]:
formed += 1
while l <= r and formed == required:
c = s[l]
if r – l + 1 < ans[0]:
ans = (r – l + 1, l, r)
window_counts[c] -= 1
if c in dict_t and window_counts[c] < dict_t[c]:
formed -= 1
l += 1
r += 1
return “” if ans[0] == float(“inf”) else s[ans[1]: ans[2]+1]
Time Complexity: O(|S| + |T|)
Space Complexity: O(|S| + |T|)
External Resource: Minimum Window Substring – LeetCode
—
7. Word Ladder
Problem: Given two words, beginWord and endWord, and a dictionary’s word list, find the length of the shortest transformation sequence from beginWord to endWord.
Approach:
Use Breadth-First Search (BFS) to find the shortest path.
from collections import deque
def ladderLength(beginWord, endWord, wordList):
wordSet = set(wordList)
if endWord not in wordSet:
return 0
queue = deque([(beginWord, 1)])
while queue:
word, length = queue.popleft()
if word == endWord:
return length
for i in range(len(word)):
for c in ‘abcdefghijklmnopqrstuvwxyz’:
next_word = word[:i] + c + word[i+1:]
if next_word in wordSet:
wordSet.remove(next_word)
queue.append((next_word, length + 1))
return 0
Time Complexity: O(N*M^2) where N is the number of words and M is the length of each word
Space Complexity: O(N)
External Resource: Word Ladder – LeetCode
8. Top K Frequent Elements
Problem: Given a non-empty array of integers, return the k most frequent elements.
Approach:
Use a hash map to count frequencies and a heap to extract the top k elements.
from collections import Counter
import heapq
def topKFrequent(nums, k):
count = Counter(nums)
return heapq.nlargest(k, count.keys(), key=count.get)
Time Complexity: O(N log k)
Space Complexity: O(N)
External Resource: Top K Frequent Elements – LeetCode
9. Find Median from Data Stream
Problem: The median is the middle value in an ordered integer list. Implement a data structure that supports adding numbers and finding the median.
Approach:
Use two heaps: a max-heap for the lower half and a min-heap for the upper half.
import heapq
class MedianFinder:
def __init__(self):
self.small = [] # Max-heap
self.large = [] # Min-heap
def addNum(self, num):
heapq.heappush(self.small, -num)
if self.small and self.large and (-self.small[0]) > self.large[0]:
heapq.heappush(self.large, -heapq.heappop(self.small))
if len(self.small) > len(self.large) + 1:
heapq.heappush(self.large, -heapq.heappop(self0
Pro Tip: Most candidates use LeetCode’s Amazon-specific problem set to practice the exact questions that often appear in real interviews.
Introduction : Amazon Coding Interview Questions 2025
Amazon’s coding interviews are designed to assess your problem-solving abilities, understanding of data structures and algorithms, and coding proficiency.
This guide compiles the 15 most frequently asked coding questions at Amazon, complete with Python solutions, explanations, time and space complexity analyses, and links to external resources for further practice.
Amazon Coding Interview Questions 2025
1. Two Sum
Problem: Given an array nums and a target sum target, return indices of the two numbers that add up to the target.
Approach:
Use a hash map to store complements as you iterate.
def two_sum(nums, target): lookup = {} for i, num in enumerate(nums): if target - num in lookup: return [lookup[target - num], i] lookup[num] = i Time Complexity: O(n) Space Complexity: O(n)
External Resource: Two Sum – LeetCode
Also Read : 20 IBM Coding Questions with Answers (Assessment by Expert)
2. Longest Substring Without Repeating Characters
Problem: Find the length of the longest substring without repeating characters.
Approach:
Use the sliding window technique with a hash map to track characters.
def length_of_longest_substring(s): char_index = {} start = max_length = 0 for end, char in enumerate(s): if char in char_index and char_index[char] >= start: start = char_index[char] + 1 char_index[char] = end max_length = max(max_length, end - start + 1) return max_length Time Complexity: O(n) Space Complexity: O(min(m, n)) where m is the size of the character set.
3. Merge Intervals
def merge(intervals): intervals.sort(key=lambda x: x[0]) merged = [] for interval in intervals: if not merged or merged[-1][1] < interval[0]: merged.append(interval) else: merged[-1][1] = max(merged[-1][1], interval[1]) return merged
Problem: Given a collection of intervals, merge all overlapping intervals.
Approach:
Sort the intervals based on the start time and merge overlapping intervals.
Time Complexity: O(n log n)
Space Complexity: O(n)
External Resource: Merge Intervals – LeetCode
—
4. Kth Largest Element in an Array
Problem: Find the kth largest element in an unsorted array.
Approach:
Time Complexity: O(n log k)
Space Complexity: O(k)
External Resource: Kth Largest Element in an Array – LeetCode
—
5. LRU Cache
Problem: Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.
Approach:
Combine a hash map with a doubly linked list to achieve O(1) time complexity for get and put operations.
class Node:
def __init__(self, key, val): self.key, self.val = key, val self.prev = self.next = None class LRUCache: def __init__(self, capacity): self.cap = capacity self.cache = {} self.head, self.tail = Node(0,0), Node(0,0) self.head.next, self.tail.prev = self.tail, self.head def _remove(self, node): prev, nxt = node.prev, node.next prev.next, nxt.prev = nxt, prev def _add(self, node): prev, nxt = self.tail.prev, self.tail prev.next = nxt.prev = node node.prev, node.next = prev, nxt def get(self, key): if key in self.cache: node = self.cache[key] self._remove(node) self._add(node) return node.val return -1 def put(self, key, val): if key in self.cache: self._remove(self.cache[key]) node = Node(key, val) self._add(node) self.cache[key] = node if len(self.cache) > self.cap: lru = self.head.next self._remove(lru) del self.cache[lru.key]
Time Complexity: O(1) for both get and put operations
Space Complexity: O(capacity)
External Resource: LRU Cache – LeetCode
—
6. Minimum Window Substring
Problem: Given two strings s and t, return the minimum window in s which will contain all the characters in t.
Approach:
Use the sliding window technique with a hash map to track character frequencies.
from collections import Counter
def min_window(s, t): if not t or not s: return "" dict_t = Counter(t) required = len(dict_t) l, r = 0, 0 formed = 0 window_counts = {} ans = float("inf"), None, None while r < len(s): c = s[r] window_counts[c] = window_counts.get(c, 0) + 1 if c in dict_t and window_counts[c] == dict_t[c]: formed += 1 while l <= r and formed == required: c = s[l] if r - l + 1 < ans[0]: ans = (r - l + 1, l, r) window_counts[c] -= 1 if c in dict_t and window_counts[c] < dict_t[c]: formed -= 1 l += 1 r += 1 return "" if ans[0] == float("inf") else s[ans[1]: ans[2]+1]
Time Complexity: O(|S| + |T|)
Space Complexity: O(|S| + |T|)
External Resource: Minimum Window Substring – LeetCode
—
7. Word Ladder
Problem: Given two words, beginWord and endWord, and a dictionary’s word list, find the length of the shortest transformation sequence from beginWord to endWord.
Approach:
Use Breadth-First Search (BFS) to find the shortest path.
from collections import deque
def ladderLength(beginWord, endWord, wordList): wordSet = set(wordList) if endWord not in wordSet: return 0 queue = deque([(beginWord, 1)]) while queue: word, length = queue.popleft() if word == endWord: return length for i in range(len(word)): for c in 'abcdefghijklmnopqrstuvwxyz': next_word = word[:i] + c + word[i+1:] if next_word in wordSet: wordSet.remove(next_word) queue.append((next_word, length + 1)) return 0
Time Complexity: O(N*M^2) where N is the number of words and M is the length of each word
Space Complexity: O(N)
External Resource: Word Ladder – LeetCode
8. Top K Frequent Elements
Problem: Given a non-empty array of integers, return the k most frequent elements.
Approach:
Use a hash map to count frequencies and a heap to extract the top k elements.
from collections import Counter
import heapq
def topKFrequent(nums, k): count = Counter(nums) return heapq.nlargest(k, count.keys(), key=count.get)
Time Complexity: O(N log k)
Space Complexity: O(N)
External Resource: Top K Frequent Elements – LeetCode
9. Find Median from Data Stream
Problem: The median is the middle value in an ordered integer list. Implement a data structure that supports adding numbers and finding the median.
Approach:
Use two heaps: a max-heap for the lower half and a min-heap for the upper half.
import heapq
class MedianFinder:
def __init__(self): self.small = [] # Max-heap self.large = [] # Min-heap def addNum(self, num): heapq.heappush(self.small, -num) if self.small and self.large and (-self.small[0]) > self.large[0]: heapq.heappush(self.large, -heapq.heappop(self.small)) if len(self.small) > len(self.large) + 1: heapq.heappush(self.large, -heapq.heappop(self0
people also search for :
Amazon coding interview questions – leetcode
Amazon Coding interview questions with solutions
Amazon coding interview questions with answers
Amazon coding interview questions and answers PDF
Amazon coding interview questions GitHub
Amazon coding interview questions for freshers with answers
Amazon coding interview questions for freshers
Amazon coding interview questions and answers
top amazon coding interview questions
amazon coding interview questions for freshers
Crack amazon coding interview questions
Crack amazon coding interview questions
Crack the top amazon coding interview questions
Preparing for Amazon’s coding interviews can be challenging, but with the right strategy and consistent practice on platforms like ccodelearner, you can confidently tackle even the toughest problems. Focus on mastering core data structures, algorithms, and problem-solving techniques.
Start with common Amazon coding interview questions, understand their patterns, and then move to more complex problems. Remember, Amazon often tests not only your coding skills but also your ability to write clean, optimized, and scalable code under pressure.
Whether you’re a fresher or an experienced developer, early preparation and mock interviews will give you a huge edge. Stay focused, keep practicing, and soon you’ll be on your way to acing the Amazon coding interview .
Wow wonderful blog layout How long have you been blogging for you make blogging look easy The overall look of your site is great as well as the content