#1809
Easy Database Ad free sessions
Database
58.9% acceptance
Mar 31, 2026
99
61
No description available.
Solution
Pandas
Time O(1)
Space O(1)
# Table: Playback
#
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | session_id | int |
# | customer_id | int |
# | start_time | int |
# | end_time | int |
# +-------------+------+
# session_id is the column with unique values for this table.
# customer_id is the ID of the customer watching this session.
# The session runs during the inclusive interval between start_time and end_time.
# It is guaranteed that start_time <= end_time and that two sessions for the same customer do not intersect.
#
#
#
# Table: Ads
#
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | ad_id | int |
# | customer_id | int |
# | timestamp | int |
# +-------------+------+
# ad_id is the column with unique values for this table.
# customer_id is the ID of the customer viewing this ad.
# timestamp is the moment of time at which the ad was shown.
#
#
#
# Write a solution to report all the sessions that did not get shown any ads.
#
# Return the result table in any order.
#
# The result format is in the following example.
#
# Example 1:
# Input:
# Playback table:
# +------------+-------------+------------+----------+
# | session_id | customer_id | start_time | end_time |
# +------------+-------------+------------+----------+
# | 1 | 1 | 1 | 5 |
# | 2 | 1 | 15 | 23 |
# | 3 | 2 | 10 | 12 |
# | 4 | 2 | 17 | 28 |
# | 5 | 2 | 2 | 8 |
# +------------+-------------+------------+----------+
# Ads table:
# +-------+-------------+-----------+
# | ad_id | customer_id | timestamp |
# +-------+-------------+-----------+
# | 1 | 1 | 5 |
# | 2 | 2 | 17 |
# | 3 | 2 | 20 |
# +-------+-------------+-----------+
# Output:
# +------------+
# | session_id |
# +------------+
# | 2 |
# | 3 |
# | 5 |
# +------------+
# Explanation:
# The ad with ID 1 was shown to user 1 at time 5 while they were in session 1.
# The ad with ID 2 was shown to user 2 at time 17 while they were in session 4.
# The ad with ID 3 was shown to user 2 at time 20 while they were in session 4.
# We can see that sessions 1 and 4 had at least one ad. Sessions 2, 3, and 5 did not have any ads, so we return them.
import pandas as pd
def ad_free_sessions(playback: pd.DataFrame, ads: pd.DataFrame) -> pd.DataFrame:
merged = playback.merge(ads, on='customer_id', how='left')
has_ad = merged[(merged['timestamp'] >= merged['start_time']) & (merged['timestamp'] <= merged['end_time'])]
ad_sessions = has_ad['session_id'].unique()
result = playback[~playback['session_id'].isin(ad_sessions)][['session_id']]
return result