Find Most Frequent Episode Length - codepath/compsci_guides GitHub Wiki
Unit 4 Session 2 Standard (Click for link to problem statements)
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
- Q: What is the goal of the problem?
- A: The goal is to determine the episode length that occurs most frequently in a given list of episode lengths.
- Q: What are the inputs?
- A: The input is a list of integers where each integer represents the length of a podcast episode in minutes.
- Q: What are the outputs?
- A: The output is the episode length that occurs most frequently. If there is a tie, return the smallest length among those with the highest frequency.
- Q: How should ties be handled?
- A: If multiple lengths have the same highest frequency, return the smallest length.
- Q: Are there any assumptions about the input?
- A: The list contains valid, non-negative integers representing episode lengths.
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use a dictionary to count the frequency of each episode length. Then, identify the length with the highest frequency. In case of a tie, return the smallest length among those with the highest frequency.
1) Initialize an empty dictionary `frequency_map` to store the frequency of each episode length.
2) Iterate through the `episode_lengths` list:
a) For each length, increment its count in `frequency_map`.
3) Initialize `max_frequency` to 0 and `most_frequent` to a large number.
4) Iterate through the `frequency_map`:
a) If the current length's frequency is higher than `max_frequency`, update `max_frequency` and set `most_frequent` to this length.
b) If the current length's frequency is equal to `max_frequency` but the length is smaller than `most_frequent`, update `most_frequent`.
5) Return `most_frequent`.
**⚠️ Common Mistakes**
- Forgetting to correctly handle ties, resulting in the incorrect length being returned.
- Not initializing or updating the frequency map properly, leading to incorrect counts.
- Assuming that there will always be a unique most frequent length without considering ties.
I-mplement
def most_frequent_length(episode_lengths):
frequency_map = {}
# Count frequencies of each length
for length in episode_lengths:
if length in frequency_map:
frequency_map[length] += 1
else:
frequency_map[length] = 1
# Find the most frequent length
max_frequency = 0
most_frequent = float('inf')
for length, frequency in frequency_map.items():
if frequency > max_frequency or (frequency == max_frequency and length < most_frequent):
max_frequency = frequency
most_frequent = length
return most_frequent
Example Usage:
print(most_frequent_length([30, 45, 30, 60, 45, 30]))
# Output: 30
print(most_frequent_length([20, 20, 30, 30, 40, 40, 40]))
# Output: 40
print(most_frequent_length([50, 60, 70, 80, 90, 100]))
# Output: 50