Hudson River Trading

Hudson River Trading Software Engineer Interview Questions

10+ questions from real Hudson River Trading Software Engineer interviews, reported by candidates.

10
Questions
3
Round Types
6
Topic Areas
2023-2025
Year Range

Round Types

OA 6 Phone 3 Phone Screen 1

Top Topics

Questions

I recently had an interview for a C++ new grad position at HRT. The interview lasted 30 minutes; we introduced ourselves and then it quickly began. The question was: Design a game. The board has 9x9 d

Just received the Hudson River Trading OA for their SWE intern role, by their description it is not the standard GCA through CodeSignal since it is only three questions and 2 hours long. Anyone have a

Hey everyone! I recently received an invitation to complete an online assessment for a C++ Software Engineer role at Hudson River Trading, and I’m excited (and a bit nervous) about what to expect. The

I'm applying for the Algo dev role (London) and trying to prepare. Apparently 90 mins to solve 3 hard leetcodes and 1 pandas question, yikes Anyone remember what questions came up?

## Problem Simulate an auction or order book exchange: match buy/sell orders by price-time priority. Likely involves heaps or sorted structures for order matching. ## Likely LeetCode equivalent No direct match. ## Tags coding, heap, simulation, trading

## Problem You are given a list of chemical reaction rules: `A + B -> C` means combining elements A and B produces C. Given an initial set of elements, simulate the reactions until no more reactions are possible, then return the final stable set. Reactions trigger in any order when the required elements are both present. An element is consumed when it participates in a reaction. ```python def simulate_reactions( initial: list[str], rules: list[tuple[str, str, str]] # (reactant1, reactant2, product) ) -> list[str]: ... ``` ``` rules: [("H","O","W"), ("W","C","X"), ("H","N","Y")] initial: ["H", "H", "O", "C", "N"] Step 1: H+O -> W remaining: [H, C, N, W] Step 2: W+C -> X remaining: [H, N, X] Step 3: H+N -> Y remaining: [X, Y] No more rules apply. Output: ["X", "Y"] ``` ## Follow-ups 1. The order of reactions can affect the final state (some reactions compete for the same element). How would you detect and report all possible stable end states? 2. What data structure lets you efficiently find which rules are currently triggered given the current element multiset? 3. How do you detect infinite loops (A+B->A+B is a degenerate rule)? 4. Extend to support catalytic reactions where element C is consumed then reproduced (e.g. C remains after A+B+C->D+C).

## Problem Given source code as a string, compute its length after stripping all comments (single-line and block comments). Involves careful string parsing and state tracking. ## Likely LeetCode equivalent No direct match. ## Tags strings, parsing, coding, oa

## Problem Given an integer `n` and a list of integers `factors`, find the smallest integer strictly greater than `n` that is divisible by every element in `factors`. ```python def smallest_divisible(n: int, factors: list[int]) -> int: ... ``` ``` Input: n=10, factors=[3, 4] LCM(3,4) = 12 Smallest multiple of 12 > 10 -> 12 Output: 12 Input: n=12, factors=[3, 4] Must be STRICTLY greater than 12 -> 24 Output: 24 Input: n=0, factors=[5, 7] LCM=35, first multiple > 0 -> 35 Output: 35 ``` ## Follow-ups 1. How do you compute the LCM of a list of numbers? Walk through the GCD-based approach. 2. What is the time complexity of your solution and what are the edge cases (e.g., factors contains 1, or factors contains duplicates)? 3. What if `n` can be up to 10^18? Does your integer arithmetic still work in Python? In Java/C++? 4. Generalize: find the K-th integer greater than N divisible by all factors. How does the formula change?

## Problem Two players alternate turns. There is a token on integer position `pos` on a number line. Each turn the current player moves the token left or right by any value in a given set `moves` (e.g., `{1, 3}`). A player who moves the token to position 0 wins. A player who cannot move (or is forced to move off the line) loses. Given `pos` and `moves`, determine if the first player wins with optimal play. ```python def first_player_wins(pos: int, moves: set[int]) -> bool: ... ``` ``` moves = {1, 3}, pos = 4 Winning positions (W) vs losing positions (L): pos=0: W (you just won) pos=1: W (move 1 -> 0) pos=2: L (can go to 1 or ... 1 is W for opponent; -1 invalid) pos=3: W (move 3 -> 0) pos=4: L (move 1->3 W for opp, move 3->1 W for opp) Output: False (first player loses) ``` ## Follow-ups 1. This is a combinatorial game theory problem. Describe the DP recurrence for `is_winning(pos)`. 2. What is the time complexity of your DP solution, and what is the memoization base case? 3. How does the problem change if moves can also increase `pos` (bidirectional movement)? 4. Extend to a 2D grid: the token is at `(r,c)`, allowed moves are `{up, down, left, right}`. The player who reaches `(0,0)` wins. How do you adapt your solution?

## Problem Given a string `s`, find the minimum number of characters to insert (at any positions) to make `s` a palindrome. Also return the count of distinct palindromes that can be formed with exactly that many insertions. ```python def min_insertions_palindrome(s: str) -> tuple[int, int]: """Returns (min_insertions, count_of_distinct_palindromes).""" ... ``` ``` Input: s = "ab" Min insertions: 1 (insert 'a' at end -> "aba", or insert 'b' at start -> "bab") Distinct palindromes: 2 Output: (1, 2) Input: s = "aab" Min insertions: 1 ("aaba" then? No... insert 'a' at end -> "aaba" not palindrome) Correct: insert 'b' before first 'a' -> "baab" YES, or insert 'a' -> "aabaa" YES Output: (1, 2) ``` ## Follow-ups 1. The minimum insertions equal `n - LPS(s)` where LPS is the Longest Palindromic Subsequence length. Prove this. 2. How do you count distinct palindromes? Walk through your approach, handling duplicate characters carefully. 3. What is the time and space complexity of the LPS DP? Can you optimize space from O(n^2) to O(n)? 4. Extend: what is the minimum number of deletions (not insertions) to make `s` a palindrome?

What Hudson River Trading Looks for in Software Engineer Interviews

Hudson River Trading Software Engineer interviews are calibrated against the level and scope expected of the role. Across 10+ verified candidate reports on LeakCode, the consistent signals interviewers look for: clear problem decomposition before coding, explicit complexity reasoning, structured handling of edge cases, and the ability to articulate trade-offs between two reasonable approaches.

The discriminator between candidates who advance and candidates who do not is rarely the final correctness of the solution. It is the path to the solution: did you ask clarifying questions, did you state your approach before coding, did you handle edge cases without prompting, and did you communicate your reasoning throughout. Reports tagged "no hire" frequently cite a working solution with poor communication; reports tagged "strong hire" cite clear thinking even when the final solution was incomplete.

How To Use This Question Set

Real interview reports are a calibration tool, not a memorization target. Companies update their question pools every 2-4 months; memorizing exact problems risks misleading you when the interviewer uses a variant. The high-leverage use: identify the patterns that appear repeatedly in Hudson River Trading Software Engineer reports, practice those patterns on similar (not identical) problems, and use the reports to understand the interviewer's typical follow-up depth.

Filter the questions below by round type, difficulty, and recency. Focus first on reports from the past 6-12 months; older reports may reference questions that have since rotated out of Hudson River Trading's pool. Reports tagged with quantified difficulty (e.g., "medium-hard") are higher-signal than reports without difficulty tags.

Round-by-Round Expectations

Hudson River Trading Software Engineer loops typically span 4-6 rounds across phone screens and on-site or virtual on-site interviews. The structure varies by company: some run 1 recruiter screen + 1 technical phone + 3-4 on-site rounds; others run 1 recruiter screen + 1 OA + 4-5 on-site rounds. The recruiter screen is logistics and culture-light; the technical phone screen is medium-difficulty coding; the on-site loop covers coding, system design (at L4+ levels), and behavioral rounds.

Each round is designed to surface a specific signal. Coding rounds: correctness, code quality, complexity reasoning, communication. System design rounds: requirements clarification, design judgment, operational thinking. Behavioral rounds: ownership scope, leadership, ambiguity tolerance, conflict navigation. Strong candidates explicitly hit each signal dimension out loud during the round; weak candidates focus only on solving the prompt.

Common Interview Mistakes At This Combination

Reports tagged "no hire" at Hudson River Trading Software Engineer commonly cite: jumping into code without clarifying requirements, coding silently for 10+ minutes without verbalizing approach, missing edge cases (empty input, single element, very large input, overflow), and producing a working solution that the candidate cannot explain or refactor when probed. Strong candidates avoid these patterns by following a consistent template: clarify, verbalize approach, code with narration, test with examples.

Behavioral and design rounds have their own failure modes. Behavioral: stories that use "we" instead of "I" diluting individual signal, stories with no quantified outcome, defensiveness when probed about failure. Design: not asking clarifying questions, not stating requirements out loud, designing for a single server when the prompt clearly implies scale, ignoring operational concerns (deployment, monitoring, rollback). These show up in roughly half of Hudson River Trading Software Engineer interview retrospectives on LeakCode.

See All 10 Hudson River Trading Software Engineer Questions

Full question text, answer context, and frequency data for subscribers.

Get Access