计算应缴税款总额【LC2303】
You are given a 0-indexed 2D integer array
bracketswherebrackets[i] = [upperi, percenti]means that theithtax bracket has an upper bound ofupperiand is taxed at a rate ofpercenti. The brackets are sorted by upper bound (i.e.upperi-1 < upperifor0 < 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
incomerepresenting the amount of money you earned. Return the amount of money that you have to pay in taxes. Answers within10-5of the actual answer will be accepted.
想每天九点起床
I guess Peter Pan was right
Growing up’s a waste of time
So I think I’ll fly away
Set a course for brighter days
-
思路:直接遍历税率数组直到
income遇到上限值,梯度计算税额,使用变量记录前一档税额的上限值pre- 若
income<=bracket[0],那么表示income遇到上限值,该段金额产生的税率为(income−pre)∗bracket[1]/100(income-pre)*bracket[1]/100(income−pre)∗bracket[1]/100 - 若
income>bracket[0],那么表示该段金额产生的上限为税率为bracket[0]bracket[0]bracket[0],(bracket[0]−pre)∗bracket[1]/100(bracket[0]-pre)*bracket[1]/100(bracket[0]−pre)∗bracket[1]/100
- 若
-
实现
class Solution { public double calculateTax(int[][] brackets, int income) { double res = 0; int n = brackets.length; int pre = 0; for (int[] bracket : brackets){ if (income <= bracket[0]) { res += (income - pre) * bracket[1] / 100.0; break; }else { res += (bracket[0] - pre) * bracket[1] / 100.0; pre = bracket[0]; } } return res; } }- 复杂度
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(1)O(1)O(1)
- 复杂度

给定一个按上限排序的税率二维数组,计算所得税的算法是按每个税率区间逐步计算。遍历税率数组,根据收入与当前税率区间的相对位置计算税额。时间复杂度为O(n),空间复杂度为O(1)。

被折叠的 条评论
为什么被折叠?



