Python Array & List Coding Interview Questions - 20 Problems
Master array and list manipulation - the most frequently tested topic in Python coding interviews. Includes Two Sum, Rotate Array, Merge Sorted Array, and more.
Optimal solutions with time/space complexity analysis and edge case handling for production interviews.
1. Two Sum (Array Hashing)
Python
O(n) Hash Map - Most Asked
def twoSum(nums: list[int], target: int) -> list[int]:
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
return []
# Test cases
print(twoSum([2,7,11,15], 9)) # [0,1]
print(twoSum([3,2,4], 6)) # [1,2]
print(twoSum([3,3], 6)) # [0,1]
**Time: O(n)** | **Space: O(n)** - Single pass hash map
2. Best Time to Buy and Sell Stock
Python
One Pass O(n)
def maxProfit(prices: list[int]) -> int:
min_price = float('inf')
max_profit = 0
for price in prices:
min_price = min(min_price, price)
max_profit = max(max_profit, price - min_price)
return max_profit
print(maxProfit([7,1,5,3,6,4])) # 5
print(maxProfit([7,6,4,3,1])) # 0
3. Contains Duplicate
Python
Hash Set O(n)
def containsDuplicate(nums: list[int]) -> bool:
return len(nums) != len(set(nums))
# Alternative explicit solution
# def containsDuplicate(nums: list[int]) -> bool:
# seen = set()
# for num in nums:
# if num in seen:
# return True
# seen.add(num)
# return False
print(containsDuplicate([1,2,3,1])) # True
print(containsDuplicate([1,2,3,4])) # False
4. Rotate Array (Medium)
Python
Reverse 3 Times O(n) In-place
def rotate(nums: list[int], k: int) -> None:
"""Do not return anything, modify nums in-place instead."""
n = len(nums)
k = k % n # Handle k > n
# Reverse entire array
nums[:] = nums[::-1]
# Reverse first k elements
nums[:k] = nums[:k][::-1]
# Reverse remaining elements
nums[k:] = nums[k:][::-1]
nums = [1,2,3,4,5,6,7]
rotate(nums, 3)
print(nums) # [5,6,7,1,2,3,4]
5. Move Zeroes
Python
Two Pointers In-place
def moveZeroes(nums: list[int]) -> None:
left = 0
for right in range(len(nums)):
if nums[right] != 0:
nums[left], nums[right] = nums[right], nums[left]
left += 1
nums = [0,1,0,3,12]
moveZeroes(nums)
print(nums) # [1,3,12,0,0]
6. Single Number (Bit Manipulation)
Python
XOR All Elements O(n)
def singleNumber(nums: list[int]) -> int:
result = 0
for num in nums:
result ^= num
return result
print(singleNumber([2,2,1])) # 1
print(singleNumber([4,1,2,1,2])) # 4
7. Product of Array Except Self (Medium)
Python
Left & Right Pass O(n)
def productExceptSelf(nums: list[int]) -> list[int]:
n = len(nums)
result = [1] * n
# Left pass
for i in range(1, n):
result[i] = result[i-1] * nums[i-1]
# Right pass
right = 1
for i in range(n-2, -1, -1):
right *= nums[i+1]
result[i] *= right
return result
print(productExceptSelf([1,2,3,4])) # [24,12,8,6]
8. Merge Sorted Array
Python
Three Pointers from End
def merge(nums1: list[int], m: int, nums2: list[int], n: int) -> None:
# Merge from end to avoid overwriting
p1, p2 = m - 1, n - 1
p = m + n - 1
while p1 >= 0 and p2 >= 0:
if nums1[p1] > nums2[p2]:
nums1[p] = nums1[p1]
p1 -= 1
else:
nums1[p] = nums2[p2]
p2 -= 1
p -= 1
# Copy remaining from nums2
nums1[:p2+1] = nums2[:p2+1]
nums1 = [1,2,3,0,0,0]
nums2 = [2,5,6]
merge(nums1, 3, nums2, 3)
print(nums1) # [1,2,2,3,5,6]
9. Maximum Subarray (Kadane's Algorithm)
Python
Dynamic Programming O(n)
def maxSubArray(nums: list[int]) -> int:
max_sum = current_sum = nums[0]
for num in nums[1:]:
current_sum = max(num, current_sum + num)
max_sum = max(max_sum, current_sum)
return max_sum
print(maxSubArray([-2,1,-3,4,-1,2,1,-5,4])) # 6
10. Remove Duplicates from Sorted Array
Python
Two Pointers O(n)
def removeDuplicates(nums: list[int]) -> int:
if not nums:
return 0
write = 1
for read in range(1, len(nums)):
if nums[read] != nums[write-1]:
nums[write] = nums[read]
write += 1
return write
nums = [1,1,2]
print(removeDuplicates(nums), nums[:3]) # 2 [1,2,1]
11. Missing Number
Python
XOR Formula O(n)
def missingNumber(nums: list[int]) -> int:
n = len(nums)
xor = 0
for i in range(n):
xor ^= i ^ nums[i]
return xor
# Sum formula alternative
# def missingNumber(nums: list[int]) -> int:
# n = len(nums)
# return n*(n+1)//2 - sum(nums)
print(missingNumber([3,0,1])) # 2
print(missingNumber([0,1])) # 2
12. Plus One
Python
Reverse Carry Propagation
def plusOne(digits: list[int]) -> list[int]:
for i in range(len(digits)-1, -1, -1):
if digits[i] < 9:
digits[i] += 1
return digits
digits[i] = 0
# All 9s case
return [1] + digits
print(plusOne([1,2,3])) # [1,2,4]
print(plusOne([9,9,9])) # [1,0,0,0]
13. Daily Temperatures (Monotonic Stack)
Python
Stack O(n)
def dailyTemperatures(temperatures: list[int]) -> list[int]:
n = len(temperatures)
result = [0] * n
stack = [] # [index]
for i in range(n):
while stack and temperatures[i] > temperatures[stack[-1]]:
prev_idx = stack.pop()
result[prev_idx] = i - prev_idx
stack.append(i)
return result
print(dailyTemperatures([73,74,75,71,69,72,76,73])) # [1,1,4,2,1,1,0,0]
VS Code Practice Configuration
JSON
launch.json for array problems
{
"version": "0.2.0",
"configurations": [
{
"name": "Array Interview Practice",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
Array Interview Tips
- Always check empty array first
- Clarify if modification in-place allowed
- Two pointers most common pattern
- Hash map for existence/frequency
- Sliding window for subarrays
- Practice reversing techniques
Master These Patterns
- Hash Map (Two Sum)
- Two Pointers (Move Zeroes)
- Sliding Window
- Prefix/Suffix Arrays (Product Except Self)
- Greedy (Max Profit)
- Bit Manipulation (Single Number)
**Practice these 13 problems daily** - they cover 80% of array questions in interviews!
Codecrown