Note
Python: Longest consecutive-day activity streak per user
Created Feb 16, 2026Last updated Feb 16, 2026
Compute each user’s longest consecutive-day streak from event logs in O(n log n) per user (or near O(n) with set-walk variant).
#"python"#"algorithms"#"datetime"#"hashmap"
Problem
Given event logs where each row is:
user_id,timestamp,event
Compute, for each user, the length of their longest consecutive-day streak with at least one event.
Key idea
For each user:
- Convert timestamps to calendar dates.
- Deduplicate dates (
set) so multiple events on the same day count once. - Sort unique dates.
- Scan once and count streaks where
(d2 - d1).days == 1.
Python snippet
from collections import defaultdict
from datetime import datetime
def longest_streak(dates):
dates = sorted(set(dates))
best = cur = 0
prev = None
for d in dates:
cur = cur + 1 if prev and (d - prev).days == 1 else 1
best = max(best, cur)
prev = d
return best
def per_user_streaks(rows):
# rows: iterable[(user_id, timestamp_str, event)]
by_user = defaultdict(list)
for user_id, ts, _event in rows:
day = datetime.fromisoformat(ts).date()
by_user[user_id].append(day)
return {u: longest_streak(days) for u, days in by_user.items()}
Complexity
- Let
k= number of unique active days for a user. - Per user:
O(k log k)for sort +O(k)scan. - Memory:
O(k).
Notes
- If timestamps are UTC but streaks should be local-time, convert timezone before taking
.date(). - For very large datasets, pre-aggregate by
(user_id, date)upstream before computing streaks.