Calculate Amount Paid in Taxes
EasyUpdated: Jul 1, 2025
Practice on:
Problem
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:
- The first
upper0dollars earned are taxed at a rate ofpercent0. - The next
upper1 - upper0dollars earned are taxed at a rate ofpercent1. - The next
upper2 - upper1dollars earned are taxed at a rate ofpercent2. - And so on.
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.
Examples
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 <= 1001 <= upperi <= 10000 <= percenti <= 1000 <= income <= 1000upperiis sorted in ascending order.- All the values of
upperiare unique. - The upper bound of the last tax bracket is greater than or equal to
income.
Solution
Method 1 – Simulate Tax Calculation by Bracket
Intuition
Iterate through each tax bracket, for each, calculate the amount of income taxed at that bracket's rate, and sum up the total tax until all income is taxed.
Approach
- Initialize
tax = 0andprev = 0(previous upper bound). - For each bracket
[upper, percent]:- Taxable = min(income, upper) - prev
- If taxable <= 0, break.
- Add taxable * percent / 100 to tax.
- Update prev = upper.
- Return tax.
Code
Java
class Solution {
public double calculateTax(int[][] brackets, int income) {
double tax = 0.0;
int prev = 0;
for (int[] b : brackets) {
int upper = b[0], percent = b[1];
int taxable = Math.min(income, upper) - prev;
if (taxable <= 0) break;
tax += taxable * percent / 100.0;
prev = upper;
}
return tax;
}
}
Python
def calculateTax(brackets, income):
tax = 0.0
prev = 0
for upper, percent in brackets:
taxable = min(income, upper) - prev
if taxable <= 0:
break
tax += taxable * percent / 100
prev = upper
return tax
Complexity
- ⏰ Time complexity:
O(N)where N = number of brackets. - 🧺 Space complexity:
O(1)