我无意间看到了部门的薪资列表,结果发现自己月薪28k,手底下好几个35k起步,我裂开。。。
最近刷到一篇帖子,真是一把程序员的心拉满了共鸣。
有位网友说他是小组长,某天无意间看到了部门的薪资列表,结果发现自己月薪28k,手底下好几个35k起步的,心态直接原地爆炸。兄弟,这也太真实了,我差点以为说的是我。
我觉得吧,这种“薪资保密”的传统,在不少公司里其实就是维稳手段。说是避免内耗,实际上就是防止你知道自己被当工具人。做项目累死累活,一句“你是leader,要有担当”,结果人家工资比你高、工时比你短、责任还没你重。感情我是冲着使命感在996啊?
有时候真想仰天长叹一句:升职是升了,工资怎么像降了似的?如果不是那张薪资表,我还以为我在上层建筑里混得不错呢。
怪不得公司老是说:“大家不要打听彼此工资。”嗯,打听了公司就不好管了呗👀。【备注:文末可领最新资料】
算法题:跳跃游戏
最近在刷算法题的时候,碰到了一个有点意思的题目——跳跃游戏。它不是什么超难的题目,但却很有意思,特别适合拿来练习贪心算法(Greedy Algorithm)。先给大家描述一下题目要求:你给定一个非负整数数组 nums,其中每个元素表示从当前索引出发,最多可以跳跃的步数。你从数组的第一个位置出发,问你能不能跳跃到数组的最后一个位置。
从字面上来看,题目非常简单,基本可以理解成“你能不能从起点跳到终点”,这不就是个小孩子的游戏么?但是你要知道,跳跃可不只局限于一步,甚至有时需要跳很远。我们的目标是能不能“走”到最后一个元素,当然,跳跃的次数越少越好。
问题的本质其实是一个判断问题,能不能通过一系列的“跳跃”从数组的第一个位置跳到最后一个位置。为了实现这个目标,我们需要通过贪心算法来尽量让自己跳得远一些。
最直观的解决办法就是从数组的第一个位置开始,尝试通过跳跃来尽可能地推进自己。每当你从一个位置跳跃到另一个位置时,你就应该考虑你能跳多远。核心思想其实就像是:你站在某个位置,如果你能跳到的位置能覆盖到终点,那就是能到达的。
来个简单的实现代码示例,大家看一下:
publicclassJumpGame {
publicbooleancanJump(int[] nums) {
intmaxReach=0; // 当前能到达的最远位置
for (inti=0; i < nums.length; i++) {
// 如果当前位置超过了能到达的最远位置,说明无法到达
if (i > maxReach) {
returnfalse;
}
// 更新最远可到达的距离
maxReach = Math.max(maxReach, i + nums[i]);
// 如果最远可到达的位置已经覆盖了终点,直接返回true
if (maxReach >= nums.length - 1) {
returntrue;
}
}
returnfalse;
}
}代码解析:
1. maxReach变量用来记录当前能够跳到的最远位置。我们从0开始,一步一步地更新这个位置。2. 每次遍历到一个位置 i,我们要检查:
• 如果 i > maxReach,说明我们之前的跳跃不够覆盖这个位置,直接返回false。• 否则,更新 maxReach,它等于maxReach和i + nums[i]中较大的那个。
maxReach 大于或等于 nums.length - 1,说明我们能跳到终点,返回 true。这个解法的时间复杂度是 O(n),其中 n 是数组的长度。因为我们只需要遍历一次数组,计算每个位置能够到达的最远距离。
关于贪心的思考:
其实,这道题的精髓就在于贪心的选择:每一步都尽量跳得最远。这个思路类似于我们常说的“局部最优解”的策略。你在每一步选择跳跃时,选择跳到当前能到达的最远位置,这样才能最大化地推进自己的目标。当然,如果每一步都跳到最远的位置,最终就能在最少的步骤内到达终点。
有网友问:“这个题有其他解法吗?” 哦,当然有!比如动态规划(Dynamic Programming)也可以解这道题,但动态规划的时间复杂度是 O(n^2),相比之下,贪心算法就显得更加高效了。不过,在我看来,贪心算法在这里就是最简洁且最实用的解法。
一点点优化:
既然我们使用了贪心算法,那么每一步都必须选择最优的选择,不能有半点“迟疑”。想象一下,如果我们在某个位置跳得太远,反而可能会错过其他更短更高效的跳跃,浪费了资源。所以贪心算法的核心就是利用局部最优来实现全局最优。
但是,贪心算法并不适合所有问题,它有时候会出现局部最优解,但并不一定是全局最优解。不过,这个题目非常适合贪心,因为在每一步,最远的跳跃就是最优解。
小小段子:
有个程序员朋友曾经跟我吐槽:“做这道题的时候,我的心情就像是坐上了过山车,起伏很大。”我不禁笑了笑:“你那是看得太透了!人家做算法题就像追剧一样,先是慢慢铺垫,最后刺激的部分才是最令人激动的!”
这个笑话虽然简单,但其实挺形象的——做算法题,虽然一开始很费劲,但最后通过一步一步的思考和优化,结果总会让你兴奋不已。
总的来说,跳跃游戏不仅仅是一个考察贪心算法的题目,它还帮助我们思考如何在有限的资源中找到最佳路径。通过优化每一步的选择,我们最终可以以最少的时间跳到目标位置。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。