迪子员工爆料:年底转岗一定要慎重!年底这个时间点转岗,大概率转过去之后要背低绩效,甚至背“年度待改进”,直接降薪降级。
今天咱们聊聊年末转岗的那些坑,尤其是年底这段时间,很多人都在考虑换个部门、转个岗。别着急,听我慢慢道来。
年底转岗,听起来像是一个机会,但实际上风险不小。
作为程序员,换个岗位不仅意味着要面对新的项目和挑战,还可能要背上“低绩效”这顶大帽子。为什么?因为大部分的绩效评估是根据你一整年的表现来决定的,年底转岗,可能你连上半年积累的成绩都没能体现出来,直接就落得个“年度待改进”。这就意味着,老板会认为你不行,甚至可能直接降薪降级。
当然,也不是每个岗位转过去都会遭遇这种情况,如果你是那些能在新岗位迅速适应的“超人”,可能就会遇到不同的待遇。👨💻但是大多数情况下,年底这种转岗,无论是因为自己对新工作充满兴趣,还是单纯的想要换个环境,都要慎重考虑。【备注:文末可领最新资料】
算法题:删除并获得点数
今天我想和大家聊聊一道看似简单、但细节上很有趣的算法题:删除并获得点数。简单来说,它要求我们在一个数字列表中删除某些元素,每删除一个元素就能获得点数,而我们目标是最大化最终能获得的点数。
我知道,光是看题目你可能就会想,啊,这种题目在面试中常见得不行,但是,千万不要小看它哦。处理这种题目有很多细节要注意,稍微不小心就会错过最佳的解法。
问题描述
给定一个整数数组 nums,你可以按以下方式操作:
删除某个元素 nums[i],并获得该元素的点数nums[i]。删除元素后,所有值为 nums[i] - 1或nums[i] + 1的元素也会被删除。
最终,我们希望得到最大化的点数。
我的思路
这道题的核心思路是动态规划(DP)。一开始你可能会觉得很简单:“就删除大一点的元素呗,怎么想也能最大化点数啊”。但是如果你这么做,后面可能就会丢掉更大的一部分点数。
举个简单的例子,如果你删除了某个数字 k,那么所有的 k-1 和 k+1 都得一起删掉。看似直接,实际上有很多选择需要权衡。
让我们先整理一下思路:
首先,我们需要统计每个数字出现的次数,因为每个数字的点数就是它出现的次数乘以它的值。 其次,我们需要设计一个 DP 数组, dp[i]代表删除所有小于等于i的数字能获得的最大点数。
动态规划的递推关系
让我们设定一个 dp 数组,假设我们有一个数值从 1 到 max_val(其中 max_val 是数组 nums 中最大值)。dp[i] 表示处理到数字 i 时能获得的最大点数。
如果我们选择删除数字
i,那么我们就获得i * count[i]的点数,同时因为数字i-1被删除了,我们需要跳过dp[i-1],所以转移方程是:dp[i] = max(dp[i-1], dp[i-2] + i * count[i])dp[i-1]代表不删除i,dp[i-2]代表删除i,并跳过i-1的影响。
代码实现
好吧,说了这么多,接下来让我们写个代码实现看看:
from collections import Counterdef deleteAndEarn(nums):
if not nums:
return 0
count = Counter(nums)
max_val = max(nums)
dp = [0] * (max_val + 1)
# base case
dp[0] = 0
dp[1] = count[1] * 1
for i in range(2, max_val + 1):
dp[i] = max(dp[i-1], dp[i-2] + count[i] * i)
return dp[max_val]
代码解析
Counter(nums)用来统计每个数字出现的次数。比如nums = [3, 4, 2, 3, 3],它会返回Counter({3: 3, 4: 1, 2: 1}),也就是数字3出现了三次,数字4和2各出现了一次。dp数组的大小是max_val + 1,用于存储每个数字i删除的最大点数。基础情况
dp[0] = 0和dp[1] = count[1] * 1,因为删除数字1时,点数就是1乘以1的个数。从
i = 2开始,对于每个数字i,我们有两个选择:要么跳过i,最大点数就是dp[i-1],要么删除i,此时最大点数就是dp[i-2] + count[i] * i。
最终 dp[max_val] 就是我们能获得的最大点数。
为什么动态规划是正确的?
这个解法的关键是通过 dp[i] 保持每一步选择的最优解。每一步都在做两个选择:不删除当前数字,或者删除当前数字并跳过相邻的数字。通过这种方式,能够确保我们做出最优选择。
如果你直接暴力删除,那肯定会出现重复计算的情况,影响效率。所以用动态规划避免了这种问题,确保我们能在合理时间内得到最优解。
小结
这道题的最大难点其实就是理解如何选择每个数字的最优删除方案。通过动态规划来记录每个数字的最优解,我们就能够在时间复杂度 O(n) 的范围内完成整个问题的求解。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。