You are given a 0-indexed 2D integer array brackets
where brackets[i] = [upperi, percenti]
means that the ith
tax bracket has an upper bound of upperi
and is taxed at a rate of percenti
. The brackets are sorted by upper bound (i.e. upperi-1 < upperi
for 0 < i < brackets.length
).
Tax is calculated as follows:
upper0
dollars earned are taxed at a rate of percent0
.upper1 - upper0
dollars earned are taxed at a rate of percent1
.upper2 - upper1
dollars earned are taxed at a rate of percent2
.You are given an integer income
representing the amount of money you earned. Return the amount of money that you have to pay in taxes. Answers within 10-5
of the actual answer will be accepted.
Example 1:
Input: brackets = [[3,50],[7,10],[12,25]], income = 10 Output: 2.65000 Explanation: Based on your income, you have 3 dollars in the 1st tax bracket, 4 dollars in the 2nd tax bracket, and 3 dollars in the 3rd tax bracket. The tax rate for the three tax brackets is 50%, 10%, and 25%, respectively. In total, you pay $3 * 50% + $4 * 10% + $3 * 25% = $2.65 in taxes.
Example 2:
Input: brackets = [[1,0],[4,25],[5,50]], income = 2 Output: 0.25000 Explanation: Based on your income, you have 1 dollar in the 1st tax bracket and 1 dollar in the 2nd tax bracket. The tax rate for the two tax brackets is 0% and 25%, respectively. In total, you pay $1 * 0% + $1 * 25% = $0.25 in taxes.
Example 3:
Input: brackets = [[2,50]], income = 0 Output: 0.00000 Explanation: You have no income to tax, so you have to pay a total of $0 in taxes.
Constraints:
1 <= brackets.length <= 100
1 <= upperi <= 1000
0 <= percenti <= 100
0 <= income <= 1000
upperi
is sorted in ascending order.upperi
are unique.income
.When you get asked this question in a real-life environment, it will often be ambiguous (especially at FAANG). Make sure to ask these questions in that case:
The brute force method in this tax calculation problem means we'll check the tax bracket for every single dollar earned, one at a time. We essentially go through each dollar and figure out which tax rate applies to it. Then, we add up all the taxes owed on each dollar to get the total tax amount.
Here's how the algorithm would work step-by-step:
def calculate_taxes_brute_force(income, tax_brackets):
total_tax_owed = 0
# Iterate through each dollar of income.
for current_dollar in range(1, income + 1):
applicable_tax_rate = 0
# Find the applicable tax bracket for the current dollar.
for bracket in tax_brackets:
if current_dollar <= bracket[0]:
applicable_tax_rate = bracket[1]
break
else:
# If no bracket is found, use the highest bracket.
applicable_tax_rate = tax_brackets[-1][1]
# Calculate the tax owed for this specific dollar.
tax_for_dollar = current_dollar * applicable_tax_rate / current_dollar
# Accumulate the tax owed.
total_tax_owed += tax_for_dollar
return total_tax_owed
To figure out the taxes, we'll go through each tax bracket one by one. We'll only calculate taxes for the portion of income that falls into each specific bracket, and then add up the taxes from all the brackets.
Here's how the algorithm would work step-by-step:
def calculate_amount_paid_in_taxes(income, tax_brackets):
total_tax = 0
for bracket in tax_brackets:
lower_bound = bracket['lower_bound']
upper_bound = bracket['upper_bound']
rate = bracket['rate']
#Determine taxable income in current bracket
if income <= lower_bound:
continue
taxable_income_in_bracket = 0
if upper_bound is None:
taxable_income_in_bracket = income - lower_bound
else:
taxable_income_in_bracket = min(income, upper_bound) - lower_bound
#Calculate and accumulate tax from the current bracket
tax_for_bracket = taxable_income_in_bracket * rate
total_tax += tax_for_bracket
return total_tax
Case | How to Handle |
---|---|
Empty brackets array | Return 0 as no tax brackets are defined, meaning no taxes are paid. |
Null brackets array | Throw an IllegalArgumentException or return an error code, signaling invalid input. |
Zero income | Return 0 as no income means no tax is owed. |
Income less than or equal to the lowest bracket upper bound. | Calculate the tax for the portion of income within that bracket and return the result. |
Income exceeds the highest bracket upper bound. | Calculate tax for each bracket up to its upper bound, then apply the highest bracket's rate to the remaining income. |
Invalid bracket: Upper bound is not strictly increasing. | Throw an IllegalArgumentException or return an error code because brackets must be sorted and increasing. |
Invalid bracket: Tax percentage is outside the range [0, 1]. | Throw an IllegalArgumentException or return an error code since tax rates can only be between 0% and 100%. |
Integer overflow when calculating tax amount (income * tax percentage) | Use long data type for intermediate calculations to prevent potential integer overflow before final return. |