#1747
Medium Database Leetflex banned accounts
Database
61.8% acceptance
Mar 31, 2026
201
18
No description available.
Solution
Pandas
Time O(1)
Space O(1)
# Table: LogInfo
#
# +-------------+----------+
# | Column Name | Type |
# +-------------+----------+
# | account_id | int |
# | ip_address | int |
# | login | datetime |
# | logout | datetime |
# +-------------+----------+
# This table may contain duplicate rows.
# The table contains information about the login and logout dates of Leetflex accounts. It also contains the IP address from which the account was logged in and out.
# It is guaranteed that the logout time is after the login time.
#
#
#
# Write a solution to find the account_id of the accounts that should be banned from Leetflex. An account should be banned if it was logged in at some moment from two different IP addresses.
#
# Return the result table in any order.
#
# The result format is in the following example.
#
# Example 1:
# Input:
# LogInfo table:
# +------------+------------+---------------------+---------------------+
# | account_id | ip_address | login | logout |
# +------------+------------+---------------------+---------------------+
# | 1 | 1 | 2021-02-01 09:00:00 | 2021-02-01 09:30:00 |
# | 1 | 2 | 2021-02-01 08:00:00 | 2021-02-01 11:30:00 |
# | 2 | 6 | 2021-02-01 20:30:00 | 2021-02-01 22:00:00 |
# | 2 | 7 | 2021-02-02 20:30:00 | 2021-02-02 22:00:00 |
# | 3 | 9 | 2021-02-01 16:00:00 | 2021-02-01 16:59:59 |
# | 3 | 13 | 2021-02-01 17:00:00 | 2021-02-01 17:59:59 |
# | 4 | 10 | 2021-02-01 16:00:00 | 2021-02-01 17:00:00 |
# | 4 | 11 | 2021-02-01 17:00:00 | 2021-02-01 17:59:59 |
# +------------+------------+---------------------+---------------------+
# Output:
# +------------+
# | account_id |
# +------------+
# | 1 |
# | 4 |
# +------------+
# Explanation:
# Account ID 1 --> The account was active from "2021-02-01 09:00:00" to "2021-02-01 09:30:00" with two different IP addresses (1 and 2). It should be banned.
# Account ID 2 --> The account was active from two different addresses (6, 7) but in two different times.
# Account ID 3 --> The account was active from two different addresses (9, 13) on the same day but they do not intersect at any moment.
# Account ID 4 --> The account was active from "2021-02-01 17:00:00" to "2021-02-01 17:00:00" with two different IP addresses (10 and 11). It should be banned.
import pandas as pd
def leetflex_banned_accnts(log_info: pd.DataFrame) -> pd.DataFrame:
merged = log_info.merge(log_info, on='account_id')
condition = (
(merged['ip_address_x'] != merged['ip_address_y']) &
(merged['login_x'] <= merged['logout_y']) &
(merged['login_y'] <= merged['logout_x'])
)
result = merged[condition][['account_id']].drop_duplicates()
return result