#3716
Find Churn Risk Customers
MediumHash MapArray
Approaches
Brute ForceOptimal
Complexity Comparison
| Brute Force | Optimal Solution★ | |
|---|---|---|
| Time | O(n²) | O(n) |
| Space | O(1) | O(n) |
💡
Intuition
Time O(n)Space O(n)
Use a single pass to collect user data and determine churn risk efficiently.
⚙️
Algorithm
3 steps- 1Step 1: Create a dictionary to track user data (last event, downgrades, max revenue).
- 2Step 2: Iterate through events, updating user data accordingly.
- 3Step 3: After processing, filter users based on churn risk criteria.
solution.py11 lines
1def find_churn_risk_customers(events):
2 user_data = {}
3 for event in events:
4 user_id = event['user_id']
5 if user_id not in user_data:
6 user_data[user_id] = {'last_event': '', 'downgrades': 0, 'max_revenue': 0}
7 user_data[user_id]['last_event'] = event['event_type']
8 if event['event_type'] == 'downgrade':
9 user_data[user_id]['downgrades'] += 1
10 user_data[user_id]['max_revenue'] = max(user_data[user_id]['max_revenue'], event['monthly_amount'])
11 return [user for user, data in user_data.items() if data['last_event'] != 'cancel' and data['downgrades'] > 0 and data['max_revenue'] > 0 and (data['max_revenue'] / 2) > data['max_revenue']]ℹ
Complexity note: Single pass through events allows efficient data collection.
- 1Active users are at risk if they downgrade and their revenue drops significantly.
- 2Monitoring user events can help predict churn effectively.
Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.