From 269d56084787f572d9f132cd0b64c2fdef435e60 Mon Sep 17 00:00:00 2001 From: deeaitch Date: Thu, 16 Apr 2026 20:41:31 -0400 Subject: [PATCH] second --- .../03-Two_Sum_Is_Not_About_Numbers/readme.md | 251 ++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 analysis/03-Two_Sum_Is_Not_About_Numbers/readme.md diff --git a/analysis/03-Two_Sum_Is_Not_About_Numbers/readme.md b/analysis/03-Two_Sum_Is_Not_About_Numbers/readme.md new file mode 100644 index 0000000..44a0c1e --- /dev/null +++ b/analysis/03-Two_Sum_Is_Not_About_Numbers/readme.md @@ -0,0 +1,251 @@ +# Analysis #XX — Two Sum Is Not About Numbers + +## Problem + +At first glance, the problem looks trivial: + +> Given a list of values, find two elements whose sum equals a target. + +This is one of the most well-known interview questions, commonly referred to as **Two Sum**. + +It is simple, clean, and perfectly defined: +- a static array +- exact arithmetic +- a guaranteed answer + +And that’s exactly why it works so well in interviews. + +--- + +## Typical Interview Thinking + +A candidate is expected to go through a familiar progression: + +1. Start with brute force (O(n²)) +2. Recognize inefficiency +3. Optimize using a hash map +4. Achieve O(n) time complexity + +```cpp +unordered_map seen; + +for (int i = 0; i < n; ++i) { + int complement = target - nums[i]; + + if (seen.count(complement)) { + return {seen[complement], i}; + } + + seen[nums[i]] = i; +} +``` + +The “correct” answer is not about solving the problem. + +It is about recognizing the pattern. + +--- + +## What This Actually Tests + +Despite its simplicity, this problem evaluates: + +- familiarity with standard patterns +- ability to choose a data structure +- understanding of time complexity + +But most importantly: + +> it tests whether you have seen this problem before. + +--- + +## A Subtle Shift + +Now let’s take the same idea and move it one step closer to reality. + +Instead of numbers, we have **log events**. + +Instead of a static array, we have a **stream**. + +Instead of a clean equality, we have **imperfect data and thresholds**. + +--- + +## Synthetic Log Example + +``` +2026-04-16T10:15:01.123Z service=api event=parse_input latency=12ms request_id=req-1001 +2026-04-16T10:15:01.130Z service=cache event=cache_miss latency=48ms request_id=req-1001 +2026-04-16T10:15:01.135Z service=db event=read_user latency=55ms request_id=req-1001 +2026-04-16T10:15:01.144Z service=net event=external_call latency=47ms request_id=req-1001 +2026-04-16T10:15:01.151Z service=cache event=cache_miss latency=60ms request_id=req-3001 +2026-04-16T10:15:01.154Z service=net event=external_call latency=52ms request_id=req-3001 +``` + +--- + +## Real Problem + +We are no longer asked to find two numbers. + +Instead, the problem becomes: + +> Detect whether there exist two events: +> - belonging to the same request +> - occurring close in time +> - whose combined latency exceeds a threshold + +This still *looks* like Two Sum. + +But it is not. + +--- + +## Where the Interview Model Breaks + +### 1. No Exact Match + +Interview version: +``` +a + b == target +``` + +Real version: +``` +a + b > threshold +``` + +We are not searching for a perfect complement. +We are evaluating a condition. + +--- + +### 2. Context Is Mandatory + +You cannot combine arbitrary events. + +A latency spike only makes sense **within the same request**. + +Without context, the result is meaningless. + +--- + +### 3. Time Matters + +Events are not just values — they exist in time. + +Two events five seconds apart may not be related at all. + +This introduces: +- time windows +- ordering issues +- temporal constraints + +--- + +### 4. Data Is Not Static + +LeetCode assumes: +- full dataset +- already loaded +- perfectly ordered + +Reality: +- streaming input +- delayed events +- missing entries +- out-of-order delivery + +--- + +## What the Problem Really Becomes + +At this point, the challenge is no longer: + +> “find two numbers” + +It becomes: + +> “determine which events are comparable at all” + +And that is a fundamentally different problem. + +--- + +## Real Engineering Approach + +Instead of solving a mathematical puzzle, we build a system. + +### Core Idea + +Maintain a sliding window of recent events per request. + +### Pseudocode + +``` +for each incoming event: + bucket = active_events[event.request_id] + + remove events outside time window + + for each old_event in bucket: + if event.latency + old_event.latency > threshold: + report anomaly + + add event to bucket +``` + +--- + +## What This Introduces + +Now we must deal with: + +- bounded memory +- streaming constraints +- time-based eviction +- correlation logic + +And beyond that: + +- out-of-order events +- duplicate logs +- partial data +- noise filtering + +--- + +## The Real Insight + +The difficulty is not in computing a sum. + +The difficulty is in defining: + +- what data is valid +- what events belong together +- what “close enough” means +- how the system behaves under imperfect conditions + +--- + +## Key Takeaway + +Two Sum is often presented as a problem about numbers. + +In reality, it is a problem about assumptions. + +Remove those assumptions, and the problem changes completely. + +> The challenge is not finding two values. +> The challenge is understanding whether those values should ever be compared. + +--- + +## Project Perspective + +Exists in real engineering? +→ Yes, but as event correlation under constraints + +Exists in interview form? +→ Yes, but stripped of context and complexity