#3716

Find Churn Risk Customers

Medium
Hash MapArray
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal 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
  1. 1Step 1: Create a dictionary to track user data (last event, downgrades, max revenue).
  2. 2Step 2: Iterate through events, updating user data accordingly.
  3. 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.