某大厂开始“捡漏”35+的人员了

大家好,我是程序员小灰。

今天在朋友圈看到一张图片:某大厂开始“捡漏”35+的人员了

ac3a59cac813e112cc9c4eb22fa3a9b0.png

好家伙,如果是真的,那程序员可就越老越吃香了,按道理,从古至今,技术活本来就应该是这样的待遇,学的越久、懂得越多、接触的越多,应该是能更加游刃有余的处理好本质工作,而不应该像现在这样,从 20 岁出头开始工作,每年都要几乎从头开始学一门新的技术、新的框架、新语言,结果到 35 岁时发现一场空。

今年有很多人在向我咨询转码的时候,都非常焦虑,最焦虑的一个问题就是到 35 岁是不是就意味着失业,是不是要跳槽其它行业,哪怕他们还只是在校的大学生,20 岁出头的样子,距离 35 岁还有十几年,便开始未雨绸缪的想着那个时间点的规划。

确实,35 岁,对于许多人来说,似乎是一个职业生涯的分水岭。

传统观念中,35 岁意味着稳定,意味着要有一定的职业成就,似乎一切都已经尘埃落定。

但对一些人来说,这也可能是一个重新出发的节点,或许是生活所迫,或许是兴趣爱好,还是有一些人选择在临近 35 岁的时候做一次跳槽转型,有不少学员就是典型的例子。

A 学员开始转码的时候,已经快 35 岁了,一开始学的过程非常吃力,经常感觉脑细胞不够用了。

7468e6e0810d676930770d9aeadce1f2.png

A 并不是技术出身,转型对他来说,最开始是一次巨大的挑战。每当遇到代码中那些复杂的逻辑和抽象的概念时,A 总感觉自己脑子转不过来。

数据结构的链表、树、图,这些对初学者来说本就艰深的概念,曾一度让他怀疑自己的选择

尽管过程艰辛,三个月后,他成功收到了 offer 。

949ad2e6832db46b4f6d8ee68529b253.png

或许,对于他来说,35 岁是他的最后一次跳槽,跳槽到互联网行业,未来都在互联网行业耕耘

...

回归我们公众号的主题。

继续来一道和「大厂秋招」相关的算法原题。

题目描述

平台:LeetCode

题号:931

题目描述:下降路径最小和

给你一个 n x n方形 整数数组 matrix ,请你找出并返回通过 matrix下降路径最小和

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)(row + 1, col) 或者 (row + 1, col + 1)

示例 1:

9593f341a1f38e1132ad706ee4767ee1.jpeg

输入:matrix = [[2,1,3],[6,5,4],[7,8,9]] 输出:13 解释:如图所示,为和最小的两条下降路径

示例 2:

954bb6a4b4a9e1f6ea352ff4d9092922.jpeg

输入:matrix = [[-19,57],[-40,-5]] 输出:-59 解释:如图所示,为和最小的下降路径

提示:

  • n == matrix.length == matrix[i].length

  • 1 <= n <= 100

  • -100 <= matrix[i][j] <= 100

解题思路

本题是典型的动态规划问题,使用动态规划的方式来逐层计算最小路径和。

  1. 定义状态

  • 使用一个二维数组 dp[i][j] 表示从第一行到达第 i 行第 j 列的最小路径和。

状态转移方程

  • 当前状态 dp[i][j] 可以由上一行的三个位置到达,即dp[i-1][j](正上方)、dp[i-1][j-1](左上方)、dp[i-1][j+1](右上方)中的最小值加上当前位置的值: dp[i][j] = matrix[i - 1][j - 1] + min(dp[i - 1][j], dp[i - 1][j - 1], dp[i - 1][j + 1])

初始状态

  • 第1行的最小路径和就是第1行本身的元素值,因此初始化dp[0][j] = matrix[0][j]

边界处理

  • 当列在边界时,需要特别处理。比如,如果是第一列,那么左上角dp[i-1][j-1]就不存在,因此可以设置为一个很大的值;同理,对于最右列,右上角dp[i-1][j+1]也需要特殊处理。

最终结果

  • 结果是最后一行的所有dp[n-1][j]中的最小值,因为下降路径可以从最后一行的任意位置结束。

参考代码

class Solution:
    def minFallingPathSum(self, matrix: List[List[int]]) -> int:
        # 矩阵大小
        n = len(matrix)
        
        # 创建 dp 数组来存储每个位置的最小路径和
        dp = [[0] * (n + 2) for _ in range(n + 1)]
        
        # 初始化边界的值为无穷大,防止越界
        for i in range(1, n + 1):
            dp[i][0] = float('inf')
            dp[i][n + 1] = float('inf')
        
        # 动态规划计算 dp 数组
        for i in range(1, n + 1):
            for j in range(1, n + 1):
                # 计算当前元素的最小下降路径和
                dp[i][j] = matrix[i - 1][j - 1] + min(dp[i - 1][j], dp[i - 1][j - 1], dp[i - 1][j + 1])
        
        # 从最后一行找到最小的路径和
        return min(dp[n][1:n+1])

< END >

最后,为了帮助近期求职的朋友们,小灰制作了一份数据结构与算法的学习导图,欢迎扫码添加小灰的个人微信,备注“算法”。

2cc61c45e6970feb7176fdefd703d44c.png

2024年,还剩下最后三个多月,让我们一起共勉 💪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值