From 9ad604196e797485d7eb1801f24a74a063076841 Mon Sep 17 00:00:00 2001 From: deeaitch Date: Thu, 16 Apr 2026 20:34:21 -0400 Subject: [PATCH] #1 intial version --- .../analysis_two_sum_not_about_numbers.md | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 analysis/03-Two_Sum_Is_Not_About_Numbers/analysis_two_sum_not_about_numbers.md diff --git a/analysis/03-Two_Sum_Is_Not_About_Numbers/analysis_two_sum_not_about_numbers.md b/analysis/03-Two_Sum_Is_Not_About_Numbers/analysis_two_sum_not_about_numbers.md new file mode 100644 index 0000000..7632cde --- /dev/null +++ b/analysis/03-Two_Sum_Is_Not_About_Numbers/analysis_two_sum_not_about_numbers.md @@ -0,0 +1,173 @@ +# Analysis #XX — Two Sum Is Not About Numbers + +## Problem (LeetCode-style) + +You are given a list of records. Each record contains: + +- an identifier +- a value +- optional metadata + +Your task is to find whether there exists a pair of records whose values sum to a given target. + +Return the identifiers of any such pair. + +Constraints: +- Each record may be used at most once +- At most one valid answer exists + +--- + +## Typical Interview Thinking + +1. Start with brute force: + - Check all pairs → O(n²) + +2. Optimize: + - Use a hash map + - Store seen values + - Lookup complement (target - value) + +```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; +} +``` + +Time complexity: O(n) +Space complexity: O(n) + +--- + +## What This Actually Tests + +- Pattern recognition +- Familiarity with hash maps +- Knowledge of time complexity +- Prior exposure to the problem + +--- + +## Real-World Version (Logs & Event Correlation) + +### 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 + +Detect whether there exist two events: + +- belonging to the same request_id +- occurring within a time window +- whose combined latency exceeds a threshold + +--- + +## Where LeetCode Logic Breaks + +### 1. Not Exact Match +LeetCode: +``` +a + b == target +``` + +Reality: +``` +a + b > threshold +``` + +--- + +### 2. Context Matters (request_id) + +You cannot mix unrelated events. + +--- + +### 3. Time Window + +Events must be close in time. + +--- + +### 4. Streaming Data + +- Data arrives continuously +- May be out of order +- Cannot store everything + +--- + +## Real Engineering Approach + +### Core Idea + +Maintain sliding windows per request_id. + +### Pseudocode + +``` +for each incoming event: + bucket = active_events[event.request_id] + + remove old events outside time window + + for each old_event in bucket: + if event.latency + old_event.latency > threshold: + report anomaly + + add event to bucket +``` + +--- + +## Additional Real Constraints + +- Out-of-order events +- Missing logs +- Duplicate events +- Noise filtering +- Memory limits + +--- + +## Key Takeaway + +Two Sum is not about numbers. + +It is about recognizing patterns in controlled environments. + +Real engineering problems are about: + +- defining valid data +- handling imperfect inputs +- managing time and memory +- maintaining system behavior under constraints + +--- + +## Project Perspective + +Exists in real engineering? +→ Yes, but heavily transformed + +Exists in interview form? +→ Yes, but oversimplified