女朋友失业5个月,晚上下班还要给她做饭,洗澡还要给她搓背,累啊,怎么办?
程序员的生活本来就够难了,白天对着屏幕写代码,晚上还得对着锅铲写“晚餐脚本”,本以为回家能“关机重启”,结果还得给女朋友搓背,彻底沦为“人形搓澡机”。
最近看到一个兄弟在网上吐槽:“女朋友失业5个月,晚上下班还要给她做饭,洗澡还要给她搓背,累啊,怎么办?”
这不,网友们的评论瞬间让我笑喷了!
网友1号:你通宵加班吧,我们帮你!——好家伙,听出了浓浓的“兄弟情”,这句话的本质翻译就是:“工作交给你,女友交给我们!”
网友2号:搓背的事交给我分担,这样你就不累了!——这不就是我们程序员最擅长的“微服务架构”吗?大家各自负责一个模块,兄弟你别抗太重!😂
说实话,程序员的 CPU 早就被工作烧得快冒烟了,回家还能再加个“高负载任务”,这日子也太不优化了!
兄弟,劝你赶紧优化生活架构,不然迟早蓝屏崩溃!或者干脆让女友学点编程,这样至少还能双人协同开发,提高点“项目效率”!【备注:文末可领最新资料】。
算法题:分发糖果
公司发年终奖了!但今年预算紧张,老板决定用 🍬 糖果 代替奖金。每个员工都按照绩效评级分配糖果,规则如下:
1. 每个人至少分到 1 颗糖。
2. 评分高的员工,糖果数量必须比相邻的评分低的员工多。
于是,我开始在纸上写写画画,思考如何在不让员工们造反的情况下,把糖果分得合情合理。
思路分析
这道题的核心是 局部最优 推导 全局最优,妥妥的 贪心算法。我们得确保两个基本条件:
• 左规则:如果
ratings[i] > ratings[i-1],那么candies[i] > candies[i-1]。• 右规则:如果
ratings[i] > ratings[i+1],那么candies[i] > candies[i+1]。
但问题是,如果只从左往右遍历,可能会遗漏右边的影响;反之亦然。所以,我们需要 两次遍历:
1. 从左往右 处理
ratings[i] > ratings[i-1]的情况。2. 从右往左 再次遍历,保证
ratings[i] > ratings[i+1]也能满足条件。
这样,我们就能保证所有员工都能拿到最少的糖果,同时保证高分的员工不会哭着闹辞职。
代码实现
用 Java 来实现的话,代码大致如下:
public int candy(int[] ratings) {if (ratings == null || ratings.length == 0) return 0;int n = ratings.length;int[] candies = new int[n];// 每个人先至少给 1 颗糖Arrays.fill(candies, 1);// 从左到右遍历,处理左规则for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i - 1]) {candies[i] = candies[i - 1] + 1;}}// 从右到左遍历,处理右规则for (int i = n - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1]) {candies[i] = Math.max(candies[i], candies[i + 1] + 1);}}// 计算糖果总数int sum = 0;for (int candy : candies) {sum += candy;}return sum;}
时间 & 空间复杂度
• 时间复杂度:两次遍历 + 一个
sum计算,时间复杂度是 O(n),属于线性复杂度,表现相当优秀。• 空间复杂度:额外用了
candies[]数组,所以是 O(n)。如果题目要求 O(1) 空间,那就得改进一下。
优化空间
要是 HR 说 “能不能别开额外数组?糖果发太多了,预算不够”,那咱们可以试试 O(1) 空间 的解法:
1. 第一遍遍历,找到符合
ratings[i] > ratings[i-1]规则的递增区间,计算糖果数量。2. 第二遍遍历,从后往前调整符合
ratings[i] > ratings[i+1]规则的递减区间。
不过,这样就需要更巧妙的计算,可能代码可读性会降低。一般面试的时候,考官大概率会对 O(n) 时间 + O(n) 空间 这个方法表示满意。
最后
这题看着像个简单的分糖果问题,但本质上是一个 “如何维护两个相邻元素之间的单调性” 的问题,跟工资发放、股票奖励甚至团队管理都有点像 😂。
现实生活中,老板如果按照这个规则给绩效奖金,大家的心态应该会稳定不少。想象一下,你辛苦干了一年,结果年终奖跟混吃等死的同事一样多,那不得当场提桶跑路?💨
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。