Skip to main content
Back to problems
#3052
Hard Database

Maximize items

Database
74.3% acceptance
Mar 31, 2026
7
12

No description available.

Solution

Pandas
Time O(n)
Space O(1)
LeetCode
solution.pandas
# Table: Inventory
# 
# +----------------+---------+
# | Column Name    | Type    |
# +----------------+---------+
# | item_id        | int     |
# | item_type      | varchar |
# | item_category  | varchar |
# | square_footage | decimal |
# +----------------+---------+
# item_id is the column of unique values for this table.
# Each row includes item id, item type, item category and sqaure footage.
# 
# Leetcode warehouse wants to maximize the number of items it can stock in a 500,000 square feet warehouse. It wants to stock as many prime items as possible, and afterwards use the remaining square footage to stock the most number of non-prime items.
# 
# Write a solution to find the number of prime and non-prime items that can be stored in the 500,000 square feet warehouse. Output the item type with prime_eligible followed by not_prime and the maximum number of items that can be stocked.
# 
# Note:
# 
# Item count must be a whole number (integer).
# 
# If the count for the not_prime category is 0, you should output 0 for that particular category.
# 
# Return the result table ordered by item count in descending order.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# Inventory table:
# +---------+----------------+---------------+----------------+
# | item_id | item_type      | item_category | square_footage |
# +---------+----------------+---------------+----------------+
# | 1374    | prime_eligible | Watches       | 68.00          |
# | 4245    | not_prime      | Art           | 26.40          |
# | 5743    | prime_eligible | Software      | 325.00         |
# | 8543    | not_prime      | Clothing      | 64.50          |
# | 2556    | not_prime      | Shoes         | 15.00          |
# | 2452    | prime_eligible | Scientific    | 85.00          |
# | 3255    | not_prime      | Furniture     | 22.60          |
# | 1672    | prime_eligible | Beauty        | 8.50           |
# | 4256    | prime_eligible | Furniture     | 55.50          |
# | 6325    | prime_eligible | Food          | 13.20          |
# +---------+----------------+---------------+----------------+
# Output:
# +----------------+-------------+
# | item_type      | item_count  |
# +----------------+-------------+
# | prime_eligible | 5400        |
# | not_prime      | 8           |
# +----------------+-------------+
# Explanation:
# - The prime-eligible category comprises a total of 6 items, amounting to a combined square footage of 555.20 (68 + 325 + 85 + 8.50 + 55.50 + 13.20). It is possible to store 900 combinations of these 6 items, totaling 5400 items and occupying 499,680 square footage.
# - In the not_prime category, there are a total of 4 items with a combined square footage of 128.50. After deducting the storage used by prime-eligible items (500,000 - 499,680 = 320), there is room for 2 combinations of non-prime items, accommodating a total of 8 non-prime items within the available 320 square footage.
# Output table is ordered by item count in descending order.

import pandas as pd

def maximize_items(inventory: pd.DataFrame) -> pd.DataFrame:
  total_space = 500000
  prime = inventory[inventory['item_type'] == 'prime_eligible']
  not_prime = inventory[inventory['item_type'] == 'not_prime']
  prime_count = len(prime)
  prime_total_sq = prime['square_footage'].sum()
  not_prime_count = len(not_prime)
  not_prime_total_sq = not_prime['square_footage'].sum()
  if prime_count > 0 and prime_total_sq > 0:
    prime_combos = int(total_space // prime_total_sq)
    prime_items = prime_combos * prime_count
    remaining = total_space - prime_combos * prime_total_sq
  else:
    prime_items = 0
    remaining = total_space
  if not_prime_count > 0 and not_prime_total_sq > 0:
    np_combos = int(remaining // not_prime_total_sq)
    np_items = np_combos * not_prime_count
  else:
    np_items = 0
  result = pd.DataFrame({
    'item_type': ['prime_eligible', 'not_prime'],
    'item_count': [prime_items, np_items]
  })
  return result.sort_values('item_count', ascending=False).reset_index(drop=True)