OpenAI doesn't publish a LeetCode list. What its own guide says, what candidates report being asked, the closest LeetCode problems, and a worked example.
There is no official list of OpenAI interview questions, and the ones candidates report are mostly not classic LeetCode puzzles. OpenAI's interview guide says skills assessments vary by team and may be pair coding, a take-home project or a technical test, and that engineering interviews look for well-designed solutions, high-quality code, optimal performance and good test coverage. Candidate reports describe small, stateful programs that grow as the interviewer adds requirements: a credit ledger with expiring balances, a spreadsheet whose cells reference each other, an iterator that becomes asynchronous. LeetCode still helps, but mainly its "design a class" problems, practised the way OpenAI extends them.
What OpenAI says about its own process
OpenAI publishes an interview guide. As of the copy archived on 9 October 2026, it describes these stages:
- Résumé review. The recruiting team typically replies within a week.
- Introductory call with a recruiter or the hiring manager about your experience, motivations and goals.
- Skills-based assessment. Formats "vary by team" and may include pair coding interviews, take-home projects or technical tests. Some roles get more than one assessment, and the recruiting team sends prep material.
- Final interviews. Typically 4–6 hours with 4–6 people over one or two days. Virtual by default; you can choose to interview at the San Francisco office.
- Decision within about a week of the finals. Your recruiter may ask for references.
Two lines in that guide matter more than the stage list. For engineering interviews, OpenAI says it generally looks for "well-designed solutions to the challenge, high-quality code, optimal performance, and good test coverage." Test coverage is the part LeetCode practice trains least, because the judge writes the tests for you.
The second line is about AI tools. The guide says expectations "vary by interview": some formats intentionally allow AI and other tools, others are designed to assess your problem-solving without them, and your preparation materials will say which applies. That is newer than some prep guides. Aced's OpenAI software engineer guide, updated around 1 October 2026, still says OpenAI "hasn't published a policy" on AI tools. Read your own prep packet rather than a third-party summary, and ask your recruiter if it isn't clear.
What candidates report being asked
These come from prep sites that collect candidate reports, not from OpenAI, so treat them as examples of the format rather than a question bank. Aced's guides report:
- Online assessment for some candidates, most often new grads: a timed, HackerRank-style test, typically two questions in roughly 90–120 minutes, where a second part extends the first.
- Technical screen: two 60-minute rounds on the same day, one coding and one system design.
- Virtual onsite: four or five rounds, including 60 minutes of coding, 60 minutes of system design, a 45-minute project presentation and one or two behavioural rounds.
Aced says classic data-structures-and-algorithms problems still appear, mostly in the online assessment and as warm-ups, while experienced candidates' onsite coding tends to turn practical or object-oriented. Here is how the reported questions line up against LeetCode:
- Reported question — Where it was reported — Closest LeetCode problem — What LeetCode leaves out
- Spreadsheet cells whose formulas reference other cells, with updates flowing to dependent cells — Aced, SWE guide — 3484. Design Spreadsheet (Medium); 631. Design Excel Sum Formula (Hard, Premium) — 3484 only evaluates =X+Y on request; nothing propagates
- An iterator, extended to 2D, then to an async iterator — Aced, SWE guide — 341. Flatten Nested List Iterator (Medium) — The async step has no LeetCode version
- Encode and decode a list of strings — Aced, SWE guide — 271. Encode and Decode Strings (Medium, Premium) — Close to the same problem
- Clone a linked list with a random pointer — Aced, new-grad guide — 138. Copy List with Random Pointer (Medium) — The same problem
- Find times when several people are all available — Aced, new-grad guide — 759. Employee Free Time (Hard, Premium) — Close to the same problem
- GPU credit ledger with credits that expire — PracHub — 1797. Design Authentication Manager (Medium) — Same expiry rule, but no amounts or partial spending
- In-memory SQL-like table — PracHub — 2408. Design SQL (Medium) — Depends on the follow-ups you get
- Follow graph with snapshots — PracHub — 1146. Snapshot Array (Medium) — The graph part
- Memory allocator with malloc and free — PracHub — 2502. Design Memory Allocator (Medium) — Depends on the follow-ups you get
- Recoverable in-memory key-value store — PracHub — 981. Time Based Key-Value Store (Medium) — Recovery after a crash
The pattern is consistent. Most of the reported onsite-style questions are a class with state that you build, then change. A single page of PracHub's OpenAI listings shows three versions of a GPU credit ledger and two key-value stores. Aced also lists a coding question where candidates refactor messy, deeply nested code while keeping the existing tests passing. None of this rewards recognising a trick. It rewards code you can still change twenty minutes later.
Worked example: an expiring credit ledger
PracHub lists this as an OpenAI technical-screen question. The rules: each add(user, amount, expiry) creates a separate lot of credits. A lot is usable at time t only while t < expiry, so a lot expiring at t is already gone. subtract(user, amount, t) spends from the lot that expires soonest and may use part of a lot. If the user's unexpired total is too small, it returns False and changes nothing. balance(user, t) returns the total and the lots, soonest expiry first.
The version reported to PracHub arrives as one spec, but Aced says some OpenAI coding rounds have parts that unlock one at a time, so practise it as a ladder:
- A single balance per user. A dictionary. Two minutes. Say it out loud and move on.
- Lots with expiry. Now the order of spending matters. Spending the soonest-expiring credits first is the choice that wastes the fewest credits, and the interviewer will want to hear you say why.
- All-or-nothing spending. Check the total before you touch any lot. Code that subtracts lot by lot and then discovers a shortfall has already corrupted state.
- Follow-ups. The PracHub listing names three: complexity, getting updates and queries to O(log n), and persisting and restoring the ledger. A sibling version on PracHub adds an event ID that must be applied at most once even if it is replayed.
Here is step 3 in Python, using a min-heap of lots per user and a cached total so the balance check is O(1):
import heapq
from collections import defaultdict
class CreditLedger:
def __init__(self):
self.lots = defaultdict(list) # user -> min-heap of [expiry, amount]
self.total = defaultdict(int) # user -> sum of the lots still in the heap
def _expire(self, user, t):
heap = self.lots[user]
while heap and heap[0][0] <= t: # a lot expiring at t is already gone
_, amount = heapq.heappop(heap)
self.total[user] -= amount
def add(self, user, amount, expiry):
if amount > 0:
heapq.heappush(self.lots[user], [expiry, amount])
self.total[user] += amount
def subtract(self, user, amount, t):
self._expire(user, t)
if amount > self.total[user]:
return False # check before touching anything
self.total[user] -= amount
heap = self.lots[user]
while amount:
lot = heap[0] # earliest expiry is spent first
take = min(amount, lot[1])
lot[1] -= take
amount -= take
if lot[1] == 0:
heapq.heappop(heap)
return True
def balance(self, user, t):
self._expire(user, t)
breakdown = [(amount, expiry) for expiry, amount in sorted(self.lots[user])]
return self.total[user], breakdownExpired lots are removed lazily, which only works because the spec says timestamps never go backwards. Say that assumption out loud; it is exactly what a follow-up will test. Each lot is pushed and popped once, so add and the expiry sweep cost O(log n) per lot, and subtract costs O(log n) for each lot it finishes. balance sorts the remaining lots, so it costs O(k log k) for k lots.
Then write the tests before you say "done", because OpenAI lists test coverage among what it looks for. The PracHub spec suggests the right ones: a single lot; spending across two lots; spending after a lot has expired; a failed spend that leaves the balance unchanged; and the boundary, where a lot expiring at time 5 can't pay for a spend at time 5. That last case is an easy one to get wrong, because the lot is already gone at exactly its expiry time.
How to prepare
Pick LeetCode problems by tag, not by company list. The "design" problems in the table are worth more here than a hundred array puzzles. Solve each one, then extend it yourself: add expiry, a replayed request that must not apply twice, a crash that must not lose data, two threads calling the same method.
Practise in pieces. Have a friend read you a spec one requirement at a time, or cover the follow-ups and reveal them after each part works. The skill is changing working code without breaking it.
Write your own tests every time. Before running anything, list the cases you would check, including the boundary ones. This is the habit LeetCode's built-in judge lets you skip.
Know your language's internals. Aced's guide suggests depth in Python iterators, generators and async, which matches the iterator question that ends in an async version.
Prepare the non-coding rounds. The reported onsite includes a project presentation and system design. OpenAI's guide recommends reading its Charter and recent updates from the team you are interviewing for, and Aced reports that behavioural rounds probe your point of view on AI.
Read the tool rules in your own prep packet. Some OpenAI formats allow AI tools and some don't, so prepare for both.
Verve's Coding Interview Copilot captures a question from your screen and returns a solution in 21+ programming languages, with quick actions including Edge Case and Complexity. In practice, solve the problem yourself first, then compare: did it find an edge case you missed, or a lower complexity? In the interview itself, follow what your OpenAI prep materials say about tools.
For another AI lab's process, see the Anthropic interview questions. For a broader problem set, start with the most common LeetCode interview questions, or compare with Palantir's LeetCode questions.
Sources
- OpenAI interview guide (stages, one-week timings, assessment formats, 4–6 hours with 4–6 people, virtual by default with optional San Francisco onsite, what engineering interviews look for, AI-tool expectations vary by interview, references, recommended reading), archived copy of 9 October 2026: https://web.archive.org/web/20261009124021/https://openai.com/interview-guide/
- OpenAI interview guide, live URL (blocks automated fetching): https://openai.com/interview-guide/
- Aced, OpenAI software engineer guide (online assessment, technical screen, onsite rounds and lengths, spreadsheet, iterator, encode/decode and refactoring questions, DSA in assessments and warm-ups, Python internals, sequential parts, behavioural focus on views about AI, "hasn't published a policy" on AI tools, updated about 17 days before 18 October 2026): https://www.aced.io/guides/openai-software-engineer-interview
- Aced, OpenAI new-grad guide (linked list with random pointer, shared availability question): https://www.aced.io/guides/openai-software-engineer-new-grad-interview
- PracHub, OpenAI software engineer questions from candidate reports (GPU credit ledger versions, key-value stores, SQL-like table, follow graph with snapshots, memory allocator): https://prachub.com/companies/openai/positions/software-engineer?page=7
- PracHub, expiring GPU credits ledger (rules, boundary, test cases, follow-ups): https://prachub.com/coding-questions/implement-an-expiring-gpu-credits-ledger
- PracHub, GPU credit ledger with idempotent event IDs: https://prachub.com/coding-questions/implement-gpu-credit-ledger
- LeetCode 3484 statement (=X+Y formulas): https://leetcode.com/problems/design-spreadsheet/
- LeetCode 1797 statement (expiry happens before other actions at the same time): https://leetcode.com/problems/design-authentication-manager/
- LeetCode 341, 138, 2408, 1146, 2502 and 981 statements: https://leetcode.com/problems/flatten-nested-list-iterator/ , https://leetcode.com/problems/copy-list-with-random-pointer/ , https://leetcode.com/problems/design-sql/ , https://leetcode.com/problems/snapshot-array/ , https://leetcode.com/problems/design-memory-allocator/ , https://leetcode.com/problems/time-based-key-value-store/
- LeetCode 631, 271 and 759 difficulty and Premium status (from LeetCode's public problem metadata): https://leetcode.com/problems/design-excel-sum-formula/ , https://leetcode.com/problems/encode-and-decode-strings/ , https://leetcode.com/problems/employee-free-time/
- Coding Copilot (screen capture, 21+ languages, quick actions): https://docs.vervecopilot.com/features/coding-copilot
Ryan
CEO of Verve AI









