被裁后。人事把工资给我少算了,她跟我说算了。。
作为一个程序员,看到这种被裁员后的工资算错的情况,真的只能感叹“这是什么操作?”
有网友吐槽说,人事把自己23个工作日算成了22个,结果还让她自己放弃那200块钱的差额,真的是让人又气又笑。你想,200块,虽然不多,但这也算是一份应得的权利,不是别人施舍给你的。
裁员时候,人事总是慢条斯理地算工资,明明有错,问她结果就是“算了,别计较了”,这话说的倒是轻松。我只能想,真的是人事部门的“高效”呀,连这样的小细节都能忽视,没点责任感,真心不适合做这些事。
如果我碰到这种事,200块我肯定不会让步。毕竟,都是自己辛苦赚来的钱,就算是裁员,也不能让人觉得你在“放水”。你说呢?【备注:文末可领最新资料】。
算法题:带限制的子序列和
在进行算法题时,最重要的挑战之一就是如何将问题抽象化,并使用合适的数据结构和算法高效地解决它。
今天,我们来探讨一个经典的算法问题:带限制的子序列和。这类问题常常要求我们在某些限制条件下找到最大或最小的子序列,通常需要用到动态规划、贪心算法等技术。让我们一步步解析这个问题。
假设题目要求我们给定一个数组 nums 和一个整数 k,我们需要从数组中找出一个子序列,使得子序列的和最大,并且子序列的元素间满足某种限制条件。最常见的限制可能是:子序列中的两个元素的索引差必须满足某个条件,或者元素的值不能相邻等。我们以一个常见的“隔元素”的子序列问题为例来进行分析。
假设题目给出的是一个整数数组 nums,我们需要找到一个子序列,使得选中的元素和最大,同时,任意两个选中的元素之间的差距至少为 k。这就意味着,选中的元素之间不能相邻,也不能差距太小。
思路解析
这个问题最直观的解法可能是暴力搜索,尝试所有可能的子序列,但这样的做法显然是不可行的,尤其当 nums 数组的长度较大时,时间复杂度会急剧增加。我们需要一种更高效的方式来解决这个问题。最好的选择是动态规划(DP)。
我们可以使用一个 dp 数组,其中 dp[i] 表示以 nums[i] 作为子序列末尾元素时的最大和。接下来,我们考虑每个元素 nums[i] 是否可以加入之前的某个子序列中。为了满足限制条件,只有当 i 与之前的某个索引 j 满足 i - j >= k 时,nums[i] 才能与 nums[j] 共同构成一个合法的子序列。
动态规划的递推关系
初始状态: dp[i] = nums[i],即每个元素至少能作为一个子序列,和就是它本身。状态转移:对于每一个 dp[i],我们需要遍历所有之前的元素dp[j],其中j < i且i - j >= k,选择一个使得dp[j]和nums[i]之和最大的情况。
我们的递推公式为:
dp[i] = max(dp[i], dp[j] + nums[i]) 其中 j < i 且 i - j >= k
这样,最终的结果就是 dp 数组中的最大值。
代码实现
def maxSubsequenceSum(nums, k):
n = len(nums)
if n == 0:
return 0 dp = [0] * n # dp[i]表示以nums[i]为结尾的子序列和的最大值
dp[0] = nums[0] # 初始状态,第一个元素只有自己
for i in range(1, n):
dp[i] = nums[i] # 至少可以单独选nums[i]作为子序列
for j in range(i-1, -1, -1): # 遍历所有可能的前驱元素
if i - j >= k: # 确保符合限制条件
dp[i] = max(dp[i], dp[j] + nums[i]) # 更新dp[i]
return max(dp) # 返回所有dp[i]的最大值
代码解析
初始化:我们创建一个 dp数组来存储每个子序列的和,并初始化dp[0]为nums[0],因为第一个元素的子序列和就是它本身。状态转移:对每个 i,我们从前一个元素j开始遍历,确保i - j >= k,然后更新dp[i]的最大值。返回结果:最后返回 dp数组中的最大值,这就是满足条件的子序列和的最大值。
时间复杂度分析
这个算法的时间复杂度为 O(n^2),因为我们对于每一个 i 都需要检查前面的所有可能的 j,所以最坏情况下的时间复杂度是二次的。对于较小的 n 值来说,二次复杂度是可以接受的,但如果 n 较大,可能需要对算法进行优化。
优化:使用单调队列
为了提高效率,可以使用单调队列来优化这个动态规划问题。通过维护一个递减的队列,我们能够快速找到符合条件的最大 dp[j],从而避免了对所有 j 进行遍历。优化后的算法的时间复杂度可以降到 O(n)
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。