Python技术迷

为什么职位越高的人越不排斥加班,特别是有些领导是加班控?

这个问题我研究过。你以为领导爱加班?错!他们爱的是“加班表演”。

有次我晚上十点还在写代码,领导忽然走过来,拍了拍我肩膀,说:“还没下班啊?早点休息啊!”我心想,你不是也在啊?结果他背着手,悠哉地踱进了茶水间,泡了个枸杞茶,开始和另一个“还没下班”的领导聊今晚球赛谁赢了。

Image

后来我才明白,职位越高的人,其实早就不靠加班完成工作了,他们靠的是气场。他们来加班,是为了展示一种态度——你们看,我这么忙,我这么敬业,我这么值得升职加薪!

说白了,咱是CPU,他们是显示器,咱干活,他们发光。领导的加班,不是“我还没走”,而是“你们都别走”。

【备注:文末可领最新资料】

算法题:买卖股票的最佳时机含冷冻期

这题是老朋友了,Leetcode 第 309 题,“买卖股票的最佳时机含冷冻期”。题意不复杂,就是在经典的买卖股票问题上加了一条“卖出后冷冻一天不能买”的限制。说白了,就是你刚出手完,得歇一天再进场,仿佛是程序员刚下班立马被拉回会议室:不准休息!

解决这种带状态转移的题,通常得靠动态规划。我们定义三个状态:

  • hold[i]:第 i 天手上持有股票的最大收益;
  • sold[i]:第 i 天卖出股票的最大收益;
  • rest[i]:第 i 天啥都不干的最大收益。

然后我们考虑转移方程,按套路来:

prices = [1,2,3,0,2]  # 举个例子
n = len(prices)

if n == 0:
    print(0)

hold = [0] * n
sold = [0] * n
rest = [0] * n

hold[0] = -prices[0]
sold[0] = 0
rest[0] = 0

for i in range(1, n):
    hold[i] = max(hold[i-1], rest[i-1] - prices[i])
    sold[i] = hold[i-1] + prices[i]
    rest[i] = max(rest[i-1], sold[i-1])

print(max(sold[-1], rest[-1]))

这里 hold[i] 表示你第 i 天选择买,或者继续持有前一天的股票;sold[i] 是第 i 天卖了,肯定来自前一天的 hold[i-1] 加今天的价格;rest[i] 则来自于前一天是 sold 或 rest,反正你今天就是空仓歇着。

最关键的冷冻期体现在哪?就是 hold[i] = max(hold[i-1], rest[i-1] - prices[i]) 这行,你不能在卖出后直接买,所以只能从 rest 转移,sold 的那天是不能进 hold 的,这就保证了冷冻期的存在。

当然,如果你不想这么写一堆数组,其实用滚动变量也可以写得更优雅点:

buy, sell, rest = -prices[0], 0, 0

for price in prices[1:]:
    prev_sell = sell
    sell = buy + price
    buy = max(buy, rest - price)
    rest = max(rest, prev_sell)

print(max(sell, rest))

这种写法更节省空间,看起来也更清爽。

我觉得这类题真的特别像职场打工日常:刚离职一天 HR 来电话说“明天入职”,你还在冷冻期呢姐!

总结一下,面对“买股票”的题,不要想着暴力解,记住几种常见的状态变化模型,像“持有”、“卖出”、“冷冻”这种概念一旦搞清楚,代码就成了状态转移方程的翻译工作,真的没什么玄学。毕竟算法这种东西,就是帮你写清楚那些本来在脑子里打结的逻辑。

冷冻期虽烦,但程序员也不是没经历过类似的——周五刚部署完 Bug,周六就得冷静一下,等老板周一早会骂人。唉,真是打工人的现实版 DP。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取