网友爆料:被降薪10%,主管让我别着急,降薪总比被裁员好,结果2个月后,主管被降薪25%~

科技   2024-12-19 14:00   陕西  

看到这条网友爆料的时候,我真的是忍不住笑了。

不知道大家有没有遇到过这种情况,刚听到自己被降薪10%,主管一脸“安慰”你:“别着急,降薪总比裁员好。”两个月后,主管突然被降薪25%,他说自己“每个月房贷要5000多”,听着简直要笑掉大牙了。

说实话,在这个行业里,降薪真的不是什么新鲜事。尤其是在公司业绩下滑,或者外部环境不好时,我们这些码农也往往成为“第一波”被调整的对象。

可这些领导,你能说服下属,咋就说服不了自己呢?

说起来,房贷5000多,真是让人心疼,感觉突然自己也有点“同情”那位主管了。😅

算法题:对角线遍历

今天咱们聊一个看似简单但有点意思的算法问题:对角线遍历

首先,咱们得理清楚题目要求:你有一个二维矩阵,题目要求你按对角线的方式来遍历这个矩阵。那么,这个“对角线遍历”到底是怎么回事呢?

简单来说,对角线遍历就是从左上角开始,沿着每一条对角线进行遍历。举个例子:

如果给你一个 3x3 的矩阵:

1 2 3
4 5 6
7 8 9

你按照对角线遍历的顺序,应该是这样:

1
2 4
3 5 7
6 8
9

从上面的矩阵来看,第一条对角线是只有一个元素的 1,第二条对角线是 2 和 4,第三条对角线是 3、5 和 7,依此类推。

思路:先考虑遍历顺序

既然是“对角线”,那么就意味着我们要从每个对角线的起点开始,逐一遍历。从上到下,左到右的顺序,遍历每一条对角线。

核心步骤:

  1. 按对角线的顺序,从左上角开始遍历。
  2. 每条对角线的起始位置,可以通过横纵坐标之和确定。
  3. 对于每一条对角线,元素的访问顺序是从左到右进行的。

对于这个问题,最简单的方法就是使用两个循环。一个循环遍历从左上到右上部分的对角线,另一个循环遍历从左下到右下的对角线。

代码实现

来看一段 Python 代码,具体实现对角线遍历:

def findDiagonalOrder(matrix):
    if not matrix:
        return []

    # 获取矩阵的维度
    m, n = len(matrix), len(matrix[0])
    
    # 结果数组
    result = []
    
    # 两个方向,true 表示从下到上,false 表示从上到下
    for i in range(m + n - 1):
        # 根据当前对角线的索引确定其起点
        if i % 2 == 0:
            row, col = min(i, m - 1), max(0, i - (m - 1))
            # 遍历该对角线
            while row >= 0 and col < n:
                result.append(matrix[row][col])
                row -= 1
                col += 1
        else:
            row, col = max(0, i - (n - 1)), min(i, n - 1)
            # 遍历该对角线
            while row < m and col >= 0:
                result.append(matrix[row][col])
                row += 1
                col -= 1
    
    return result

解释

  1. 起始位置:根据对角线的索引,我们可以判断其起点位置。起点的行列位置是通过 min(i, m-1)max(0, i - (m-1)) 来计算的,反之在第二个方向上则使用 max(0, i - (n-1))min(i, n-1)
  2. 遍历:对于每一条对角线,直接从起点出发,向右下或向左上遍历,直到越界。

示例

如果我们用代码测试一下这个 3x3 的矩阵:

matrix = [
    [123],
    [456],
    [789]
]

print(findDiagonalOrder(matrix))

输出应该是:

[1, 2, 4, 3, 5, 7, 6, 8, 9]

可以看到,输出顺序正是我们预期的对角线遍历顺序。

复杂度分析

  • 时间复杂度:每个元素只被访问一次,因此时间复杂度是 O(m * n),其中 m 是矩阵的行数,n 是列数。
  • 空间复杂度:存储结果需要 O(m * n) 的空间,用来存储遍历结果。

最后的小感想

其实这个问题看起来很简单,直接的思路就能解决,但处理起来确实需要注意方向和起点的选择。你可能觉得这就是简单的遍历,其实背后还是有一些细节要把控,比如对角线的起点,遍历方向的控制等等。如果把这些细节处理不好,往往容易搞错,尤其是在处理矩阵这种“易错”的结构时。

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

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

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

Python技术迷
回复:python,领取Python面试题。分享AI编程,AI工具,Python技术栈,Python教程,Python编程视频,Pycharm项目,Python爬虫,Python数据分析,Python核心技术,Python量化交易。
 最新文章