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: Department
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | revenue | int | | month | varchar | +-------------+---------+ In SQL,(id, month) is the primary key of this table. The table has information about the revenue of each department per month. The month has values in ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].
Reformat the table such that there is a department id column and a revenue column for each month.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input: Department table: +------+---------+-------+ | id | revenue | month | +------+---------+-------+ | 1 | 8000 | Jan | | 2 | 9000 | Jan | | 3 | 10000 | Feb | | 1 | 7000 | Feb | | 1 | 6000 | Mar | +------+---------+-------+ Output: +------+-------------+-------------+-------------+-----+-------------+ | id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue | +------+-------------+-------------+-------------+-----+-------------+ | 1 | 8000 | 7000 | 6000 | ... | null | | 2 | 9000 | null | null | ... | null | | 3 | null | 10000 | null | ... | null | +------+-------------+-------------+-------------+-----+-------------+ Explanation: The revenue from Apr to Dec is null. Note that the result table has 13 columns (1 for the department id + 12 for the months).
Problem summary: Table: Department +-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | revenue | int | | month | varchar | +-------------+---------+ In SQL,(id, month) is the primary key of this table. The table has information about the revenue of each department per month. The month has values in ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]. Reformat the table such that there is a department id column and a revenue column for each month. Return the result table in any order. 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":{"Department":["id","revenue","month"]},"rows":{"Department":[[1,8000,"Jan"],[2,9000,"Jan"],[3,10000,"Feb"],[1,7000,"Feb"],[1,6000,"Mar"]]}}Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #1179: Reformat Department Table
// Auto-generated Java example from rust.
class Solution {
public void exampleSolution() {
}
}
// Reference (rust):
// // Accepted solution for LeetCode #1179: Reformat Department Table
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1179: Reformat Department Table
// # Write your MySQL query statement below
// SELECT
// id,
// SUM(
// CASE month
// WHEN 'Jan' THEN revenue
// END
// ) AS Jan_Revenue,
// SUM(
// CASE month
// WHEN 'Feb' THEN revenue
// END
// ) AS Feb_Revenue,
// SUM(
// CASE month
// WHEN 'Mar' THEN revenue
// END
// ) AS Mar_Revenue,
// SUM(
// CASE month
// WHEN 'Apr' THEN revenue
// END
// ) AS Apr_Revenue,
// SUM(
// CASE month
// WHEN 'May' THEN revenue
// END
// ) AS May_Revenue,
// SUM(
// CASE month
// WHEN 'Jun' THEN revenue
// END
// ) AS Jun_Revenue,
// SUM(
// CASE month
// WHEN 'Jul' THEN revenue
// END
// ) AS Jul_Revenue,
// SUM(
// CASE month
// WHEN 'Aug' THEN revenue
// END
// ) AS Aug_Revenue,
// SUM(
// CASE month
// WHEN 'Sep' THEN revenue
// END
// ) AS Sep_Revenue,
// SUM(
// CASE month
// WHEN 'Oct' THEN revenue
// END
// ) AS Oct_Revenue,
// SUM(
// CASE month
// WHEN 'Nov' THEN revenue
// END
// ) AS Nov_Revenue,
// SUM(
// CASE month
// WHEN 'Dec' THEN revenue
// END
// ) AS Dec_Revenue
// FROM Department
// GROUP BY 1;
// "#
// }
// Accepted solution for LeetCode #1179: Reformat Department Table
// Auto-generated Go example from rust.
func exampleSolution() {
}
// Reference (rust):
// // Accepted solution for LeetCode #1179: Reformat Department Table
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1179: Reformat Department Table
// # Write your MySQL query statement below
// SELECT
// id,
// SUM(
// CASE month
// WHEN 'Jan' THEN revenue
// END
// ) AS Jan_Revenue,
// SUM(
// CASE month
// WHEN 'Feb' THEN revenue
// END
// ) AS Feb_Revenue,
// SUM(
// CASE month
// WHEN 'Mar' THEN revenue
// END
// ) AS Mar_Revenue,
// SUM(
// CASE month
// WHEN 'Apr' THEN revenue
// END
// ) AS Apr_Revenue,
// SUM(
// CASE month
// WHEN 'May' THEN revenue
// END
// ) AS May_Revenue,
// SUM(
// CASE month
// WHEN 'Jun' THEN revenue
// END
// ) AS Jun_Revenue,
// SUM(
// CASE month
// WHEN 'Jul' THEN revenue
// END
// ) AS Jul_Revenue,
// SUM(
// CASE month
// WHEN 'Aug' THEN revenue
// END
// ) AS Aug_Revenue,
// SUM(
// CASE month
// WHEN 'Sep' THEN revenue
// END
// ) AS Sep_Revenue,
// SUM(
// CASE month
// WHEN 'Oct' THEN revenue
// END
// ) AS Oct_Revenue,
// SUM(
// CASE month
// WHEN 'Nov' THEN revenue
// END
// ) AS Nov_Revenue,
// SUM(
// CASE month
// WHEN 'Dec' THEN revenue
// END
// ) AS Dec_Revenue
// FROM Department
// GROUP BY 1;
// "#
// }
# Accepted solution for LeetCode #1179: Reformat Department Table
# Auto-generated Python example from rust.
def example_solution() -> None:
return
# Reference (rust):
# // Accepted solution for LeetCode #1179: Reformat Department Table
# pub fn sql_example() -> &'static str {
# r#"
# -- Accepted solution for LeetCode #1179: Reformat Department Table
# # Write your MySQL query statement below
# SELECT
# id,
# SUM(
# CASE month
# WHEN 'Jan' THEN revenue
# END
# ) AS Jan_Revenue,
# SUM(
# CASE month
# WHEN 'Feb' THEN revenue
# END
# ) AS Feb_Revenue,
# SUM(
# CASE month
# WHEN 'Mar' THEN revenue
# END
# ) AS Mar_Revenue,
# SUM(
# CASE month
# WHEN 'Apr' THEN revenue
# END
# ) AS Apr_Revenue,
# SUM(
# CASE month
# WHEN 'May' THEN revenue
# END
# ) AS May_Revenue,
# SUM(
# CASE month
# WHEN 'Jun' THEN revenue
# END
# ) AS Jun_Revenue,
# SUM(
# CASE month
# WHEN 'Jul' THEN revenue
# END
# ) AS Jul_Revenue,
# SUM(
# CASE month
# WHEN 'Aug' THEN revenue
# END
# ) AS Aug_Revenue,
# SUM(
# CASE month
# WHEN 'Sep' THEN revenue
# END
# ) AS Sep_Revenue,
# SUM(
# CASE month
# WHEN 'Oct' THEN revenue
# END
# ) AS Oct_Revenue,
# SUM(
# CASE month
# WHEN 'Nov' THEN revenue
# END
# ) AS Nov_Revenue,
# SUM(
# CASE month
# WHEN 'Dec' THEN revenue
# END
# ) AS Dec_Revenue
# FROM Department
# GROUP BY 1;
# "#
# }
// Accepted solution for LeetCode #1179: Reformat Department Table
pub fn sql_example() -> &'static str {
r#"
-- Accepted solution for LeetCode #1179: Reformat Department Table
# Write your MySQL query statement below
SELECT
id,
SUM(
CASE month
WHEN 'Jan' THEN revenue
END
) AS Jan_Revenue,
SUM(
CASE month
WHEN 'Feb' THEN revenue
END
) AS Feb_Revenue,
SUM(
CASE month
WHEN 'Mar' THEN revenue
END
) AS Mar_Revenue,
SUM(
CASE month
WHEN 'Apr' THEN revenue
END
) AS Apr_Revenue,
SUM(
CASE month
WHEN 'May' THEN revenue
END
) AS May_Revenue,
SUM(
CASE month
WHEN 'Jun' THEN revenue
END
) AS Jun_Revenue,
SUM(
CASE month
WHEN 'Jul' THEN revenue
END
) AS Jul_Revenue,
SUM(
CASE month
WHEN 'Aug' THEN revenue
END
) AS Aug_Revenue,
SUM(
CASE month
WHEN 'Sep' THEN revenue
END
) AS Sep_Revenue,
SUM(
CASE month
WHEN 'Oct' THEN revenue
END
) AS Oct_Revenue,
SUM(
CASE month
WHEN 'Nov' THEN revenue
END
) AS Nov_Revenue,
SUM(
CASE month
WHEN 'Dec' THEN revenue
END
) AS Dec_Revenue
FROM Department
GROUP BY 1;
"#
}
// Accepted solution for LeetCode #1179: Reformat Department Table
// Auto-generated TypeScript example from rust.
function exampleSolution(): void {
}
// Reference (rust):
// // Accepted solution for LeetCode #1179: Reformat Department Table
// pub fn sql_example() -> &'static str {
// r#"
// -- Accepted solution for LeetCode #1179: Reformat Department Table
// # Write your MySQL query statement below
// SELECT
// id,
// SUM(
// CASE month
// WHEN 'Jan' THEN revenue
// END
// ) AS Jan_Revenue,
// SUM(
// CASE month
// WHEN 'Feb' THEN revenue
// END
// ) AS Feb_Revenue,
// SUM(
// CASE month
// WHEN 'Mar' THEN revenue
// END
// ) AS Mar_Revenue,
// SUM(
// CASE month
// WHEN 'Apr' THEN revenue
// END
// ) AS Apr_Revenue,
// SUM(
// CASE month
// WHEN 'May' THEN revenue
// END
// ) AS May_Revenue,
// SUM(
// CASE month
// WHEN 'Jun' THEN revenue
// END
// ) AS Jun_Revenue,
// SUM(
// CASE month
// WHEN 'Jul' THEN revenue
// END
// ) AS Jul_Revenue,
// SUM(
// CASE month
// WHEN 'Aug' THEN revenue
// END
// ) AS Aug_Revenue,
// SUM(
// CASE month
// WHEN 'Sep' THEN revenue
// END
// ) AS Sep_Revenue,
// SUM(
// CASE month
// WHEN 'Oct' THEN revenue
// END
// ) AS Oct_Revenue,
// SUM(
// CASE month
// WHEN 'Nov' THEN revenue
// END
// ) AS Nov_Revenue,
// SUM(
// CASE month
// WHEN 'Dec' THEN revenue
// END
// ) AS Dec_Revenue
// FROM Department
// GROUP 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.