Off-by-one on range boundaries
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Build confidence with an intuition-first walkthrough focused on core interview patterns fundamentals.
Table: Employees
+-------------+---------+ | Column Name | Type | +-------------+---------+ | employee_id | int | | name | varchar | | salary | int | +-------------+---------+ employee_id is the primary key (column with unique values) for this table. Each row of this table indicates the employee ID, employee name, and salary.
Write a solution to calculate the bonus of each employee. The bonus of an employee is 100% of their salary if the ID of the employee is an odd number and the employee's name does not start with the character 'M'. The bonus of an employee is 0 otherwise.
Return the result table ordered by employee_id.
The result format is in the following example.
Example 1:
Input: Employees table: +-------------+---------+--------+ | employee_id | name | salary | +-------------+---------+--------+ | 2 | Meir | 3000 | | 3 | Michael | 3800 | | 7 | Addilyn | 7400 | | 8 | Juan | 6100 | | 9 | Kannon | 7700 | +-------------+---------+--------+ Output: +-------------+-------+ | employee_id | bonus | +-------------+-------+ | 2 | 0 | | 3 | 0 | | 7 | 7400 | | 8 | 0 | | 9 | 7700 | +-------------+-------+ Explanation: The employees with IDs 2 and 8 get 0 bonus because they have an even employee_id. The employee with ID 3 gets 0 bonus because their name starts with 'M'. The rest of the employees get a 100% bonus.
Problem summary: Table: Employees +-------------+---------+ | Column Name | Type | +-------------+---------+ | employee_id | int | | name | varchar | | salary | int | +-------------+---------+ employee_id is the primary key (column with unique values) for this table. Each row of this table indicates the employee ID, employee name, and salary. Write a solution to calculate the bonus of each employee. The bonus of an employee is 100% of their salary if the ID of the employee is an odd number and the employee's name does not start with the character 'M'. The bonus of an employee is 0 otherwise. Return the result table ordered by employee_id. The result format is in the following example.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: General problem-solving
{"headers":{"Employees":["employee_id","name","salary"]},"rows":{"Employees":[[2,"Meir",3000],[3,"Michael",3800],[7,"Addilyn",7400],[8,"Juan",6100],[9,"Kannon",7700]]}}Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #1873: Calculate Special Bonus
// Auto-generated Java example from rust.
class Solution {
public void exampleSolution() {
}
}
// Reference (rust):
// // Accepted solution for LeetCode #1873: Calculate Special Bonus
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1873: Calculate Special Bonus
// # Write your MySQL query statement below
// SELECT
// employee_id,
// IF(employee_id % 2 = 0 OR LEFT(name, 1) = 'M', 0, salary) AS bonus
// FROM employees
// ORDER BY 1;
// "#
// }
// Accepted solution for LeetCode #1873: Calculate Special Bonus
// Auto-generated Go example from rust.
func exampleSolution() {
}
// Reference (rust):
// // Accepted solution for LeetCode #1873: Calculate Special Bonus
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1873: Calculate Special Bonus
// # Write your MySQL query statement below
// SELECT
// employee_id,
// IF(employee_id % 2 = 0 OR LEFT(name, 1) = 'M', 0, salary) AS bonus
// FROM employees
// ORDER BY 1;
// "#
// }
# Accepted solution for LeetCode #1873: Calculate Special Bonus
# Auto-generated Python example from rust.
def example_solution() -> None:
return
# Reference (rust):
# // Accepted solution for LeetCode #1873: Calculate Special Bonus
# pub fn sql_example() -> &'static str {
# r#"
# -- Accepted solution for LeetCode #1873: Calculate Special Bonus
# # Write your MySQL query statement below
# SELECT
# employee_id,
# IF(employee_id % 2 = 0 OR LEFT(name, 1) = 'M', 0, salary) AS bonus
# FROM employees
# ORDER BY 1;
# "#
# }
// Accepted solution for LeetCode #1873: Calculate Special Bonus
pub fn sql_example() -> &'static str {
r#"
-- Accepted solution for LeetCode #1873: Calculate Special Bonus
# Write your MySQL query statement below
SELECT
employee_id,
IF(employee_id % 2 = 0 OR LEFT(name, 1) = 'M', 0, salary) AS bonus
FROM employees
ORDER BY 1;
"#
}
// Accepted solution for LeetCode #1873: Calculate Special Bonus
// Auto-generated TypeScript example from rust.
function exampleSolution(): void {
}
// Reference (rust):
// // Accepted solution for LeetCode #1873: Calculate Special Bonus
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1873: Calculate Special Bonus
// # Write your MySQL query statement below
// SELECT
// employee_id,
// IF(employee_id % 2 = 0 OR LEFT(name, 1) = 'M', 0, salary) AS bonus
// FROM employees
// ORDER BY 1;
// "#
// }
Use this to step through a reusable interview workflow for this problem.
Two nested loops check every pair or subarray. The outer loop fixes a starting point, the inner loop extends or searches. For n elements this gives up to n²/2 operations. No extra space, but the quadratic time is prohibitive for large inputs.
Most array problems have an O(n²) brute force (nested loops) and an O(n) optimal (single pass with clever state tracking). The key is identifying what information to maintain as you scan: a running max, a prefix sum, a hash map of seen values, or two pointers.
Review these before coding to avoid predictable interview regressions.
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.