If this is your first time preparing for Uber's Online Assessment, the first wall is rarely difficulty - it is not knowing what the platform looks like, how to allocate time, or what counts as "normal" question quality. Uber's OA sits around LeetCode Medium, leaning slightly easier, but Uber sends OAs to SDE, Data Engineer, and Data Scientist tracks in the same window, so prepping the wrong topics burns half your time.
This is the site's first beginner-level guide for Uber OA. We start with platform, time, and scoring fundamentals, then ship four fully practice-ready problems (not the existing real-question debriefs already on the site) covering prefix sums, binary tree reconstruction, union-find, and DP. By the end you should be able to drop into a 90-minute mock immediately.
Uber OA at a Glance: Platform, Length, Format
| Field | Detail |
|---|---|
| Platform | HackerRank (most batches), occasional CodeSignal |
| Length | 90 min (SDE) / 75 min (DS, DE) |
| Question count | 2-3 coding + occasional 5-10 MCQ |
| Languages | Python / Java / C++ / Go are mainstream |
| Scoring | score = AC test cases / total cases; complexity matters for hidden cases |
The most important rule: HackerRank's "Run" only executes the visible samples. Passing samples is not the same as passing submission. Always wait until "Submit" returns the full hidden test result.
Mindset: What Counts as "Good Enough"?
| Self-assessment | Beginner | Pass-bar | Strong |
|---|---|---|---|
| LeetCode Medium AC speed | 30-40 min | 20-25 min | 12-15 min |
| Data structures fluent | <3 | 5-6 | 8+ |
| Edge case awareness | usually forgets | adds afterward | lists upfront |
| Platform IO fluency | improvises | can write | templated |
Conclusion: pass-bar is enough to clear Uber OA. You do not need to grind to first-blood Hard speed.
Practice 1: Prefix Sum - Range Trip Counts
Given an array
trips[]of N daily trip counts and Q queries(l, r), return the sum over[l, r]. N, Q <= 1e5.
Approach: classic prefix sum.
def range_trip_sum(trips, queries):
pref = [0] * (len(trips) + 1)
for i, t in enumerate(trips):
pref[i+1] = pref[i] + t
return [pref[r+1] - pref[l] for l, r in queries]
Time complexity: O(N) preprocess, O(1) per query. Practice target: write it from scratch in 5 minutes.
Practice 2: Binary Tree - City Path Reconstruction
Given a serialized string
"1,2,#,3,#,#,4,#,#"(preorder with#as null), rebuild the tree and return the root.
Approach: consume tokens with an iterator, recurse to build.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def deserialize(data: str):
tokens = iter(data.split(','))
def build():
v = next(tokens)
if v == '#':
return None
node = TreeNode(int(v))
node.left = build()
node.right = build()
return node
return build()
Time complexity: O(N). Practice target: understand why an iterator beats index tracking.
Practice 3: Union-Find - Driver Network Connectivity
Given N drivers and M relationships, find the size of the largest connected group.
Approach: union-find with size weighting plus root-size counting.
class DSU:
def __init__(self, n):
self.p = list(range(n))
self.sz = [1] * n
def find(self, x):
while self.p[x] != x:
self.p[x] = self.p[self.p[x]]
x = self.p[x]
return x
def union(self, a, b):
ra, rb = self.find(a), self.find(b)
if ra == rb:
return
if self.sz[ra] < self.sz[rb]:
ra, rb = rb, ra
self.p[rb] = ra
self.sz[ra] += self.sz[rb]
def largest_group(n, edges):
d = DSU(n)
for a, b in edges:
d.union(a, b)
return max(d.sz[d.find(i)] for i in range(n))
Time complexity: near O(α(N) · M). Practice target: write path compression + union by size in 8 minutes.
Practice 4: DP - Maximize Surge Pricing
Given N timeslots with surge multipliers
mul[i], pick K non-adjacent slots to maximize the sum of multipliers.
Approach: an extended House Robber, picking K elements that are not adjacent.
def max_surge_choices(mul, K):
n = len(mul)
NEG = float("-inf")
dp = [[NEG]*(K+1) for _ in range(n+1)]
for i in range(n+1):
dp[i][0] = 0
for i in range(1, n+1):
for k in range(1, K+1):
dp[i][k] = dp[i-1][k]
if i >= 2:
dp[i][k] = max(dp[i][k], dp[i-2][k-1] + mul[i-1])
else:
dp[i][k] = max(dp[i][k], mul[i-1])
return dp[n][K]
Time complexity: O(N·K). Practice target: derive the recurrence and code it within 12 minutes.
Recommended 90-Minute Pacing
| Time slot | Task |
|---|---|
| 0-5 min | Skim all problems, score by "fastest I can clear" |
| 5-30 min | Tackle the highest-confidence problem first, aim for 100% AC |
| 30-65 min | Second problem - brute force past samples, then optimize |
| 65-85 min | Third problem if any - half AC is acceptable |
| 85-90 min | Final review and submission check before the browser closes |
Beyond OA: What Comes Next
| Stage | Content | Length |
|---|---|---|
| Recruiter Screen | Behavioral plus project deep dive | 30 min |
| Tech Phone | Medium algorithm plus light system | 45 min |
| Onsite | 4-5 rounds: algorithm, system, behavioral, hiring manager | 1 working day |
FAQ
Q1: Approximate Uber OA pass rate? Not officially published; community estimates land at 30-40 percent. Near-full AC on both problems almost always advances to Tech Phone.
Q2: Best HackerRank IO pattern?
Use sys.stdin.readline plus sys.stdout.write - 5-10x faster than input() / print(). Just remember to strip().
Q3: First problem stuck at 30 minutes without sample passing - what now? Switch to the next one immediately. Uber OA scores total accepted cases, so accumulating partials beats burning out on one.
Q4: Are DS / DE OAs as hard as SDE? DS / DE OAs add SQL and Pandas problems and shave 15 minutes off the clock. Algorithm count drops, but SQL often turns into a hard window function.
Q5: How long after OA does Tech Phone come? Usually 5-10 business days. HM hold can stretch this to three weeks.
Preparing for Uber OA?
If you just received the OA link and worry about 90-minute pacing, or you want a real person doing OA proxy / VO proxy live shadowing on interview day, we can talk through a full OA assist / VO assist plan.
Contact
Need real interview questions and a custom prep plan? Add WeChat Coding0201 now to get questions.
Email: [email protected] Telegram: @OAVOProxy