年终奖一定要合理避税哇,月薪 39000,发4个月年终奖,如果把 12000 放到工资中发放,可以少交税 12600
我刷到个网友现身说法:月薪3.9万,公司要发4个月年终。他去年脑子一热,年终奖一把梭,税交得肉疼。今年学精了,提前跟公司聊方案:把其中1.2万拆到平时工资里发,算下来能少交一万多税。
他说那一刻感觉自己不是在拿奖金,是在“捡回丢失的血条”。
评论区也很热闹。有的说:“老板:你很会算啊。”还有人吐槽:“我也想合理避税,先给我发个年终奖行吗?”
我觉得这事儿最关键不是会不会算,而是敢不敢开口沟通,早说一句,可能就是一台新电脑的钱。
真要动手,个税APP配个税后计算器挺香,输入工资、奖金、专项扣除,几下就能看到不同发放方式差多少,谈方案心里就有底,别等扣完税才开始拍大腿。
算法题:直线镜像
昨天群里有人丢了个算法题叫“直线镜像”,我一看名字就头大,脑子里全是初中几何老师那句“做辅助线啊同学们”…结果点开题目发现,哦,原来是那种很像线上事故排查的题:你以为对称很美好,实际全是边界条件在阴你。
大概意思一般是:给一堆点 (x, y),问你能不能找到一条竖直的直线x = k,让所有点关于这条线镜像以后,还能在点集里找到对应点。注意哈,很多版本就卡在“竖直”这俩字上,你别脑补成任意直线对称,不然你写到一半会想砸键盘。
我当时的直觉很像看日志:先找“基线”。如果真有对称轴 x = k,那所有点的 x 坐标关于 k 成对出现。于是最左边的 min_x 和最右边的 max_x,它俩应该“对称得最明显”,对称轴就在中间:k = (min_x + max_x) / 2但我一般不爱用浮点,浮点这玩意就跟线上时区一样,迟早坑你。所以我直接记一个整数 S = min_x + max_x,那对称条件就变成:对每个点 (x, y),必须存在 (S - x, y)。
然后就是“查表”,用 set 存点,O(1) 查。重复点?别慌,set 天然去重,题目一般也不要求计数一致(大多数版本这样),要是要求计数那就换 Counter,不过先别把自己吓死。
核心代码我给你一份,够你在面试官面前假装很淡定那种(其实我手心都出汗):
from typing import List, Tuple
defis_reflected(points: List[Tuple[int, int]]) -> bool:
ifnot points:
returnTrue
# 用 set 存点,查镜像是否存在
pset = set(points)
min_x = min(x for x, _ in points)
max_x = max(x for x, _ in points)
s = min_x + max_x # 2*k,避免浮点
for x, y in pset:
if (s - x, y) notin pset:
returnFalse
returnTrue
# 随手测两把(别笑,我写算法也靠“随手测”保命)
if __name__ == "__main__":
print(is_reflected([(1, 1), (2, 1), (1, 2), (2, 2)])) # True, 轴是 x=1.5
print(is_reflected([(1, 1), (2, 1), (3, 1)])) # True, 轴是 x=2
print(is_reflected([(1, 1), (2, 2)])) # False
对了,有人会问:为啥只看 min_x 和 max_x 就敢确定轴?因为如果存在某条竖直对称轴,那所有点的 x 关于它镜像之后还在集合里,最左的只能和最右的互为镜像,不可能最左跑去跟中间某个点配对对吧…这就像你查链路日志,最慢的那段不可能凭空消失,它一定跟某个资源瓶颈“配对”着。