Python技术迷

外包东西做的又慢又差,又不太好意思把他换掉,怎么搞?

今天又看到一个有趣的网友吐槽:外包的东西做得又慢又差,但又不太好意思换掉对方,这种情况到底该怎么搞呢?🤔

Image

我想说,外包的痛苦大家都有体会。首先,外包的工资一般是我们内部员工的三分之一,怎么可能期望人家像我们一样高效?

Image

你给的报酬,往往决定了人家的动力和付出的程度。想让外包做得又快又好,又不愿意给人家相应的资源和支持,这不是天方夜谭吗?🤑

其次,我完全赞同评论里说的:“如实根据工作输出速度和质量打绩效。”有时候我们程序员也会不好意思,觉得好像太直接了不太好。

但实际上,咱们自己也不想做冤大头啊!换句话说,外包也是一份工作,做得好,咱们当然要给奖励;做得差,咱们也不能让他“摸鱼”。

总之,工作是工作,不是交情。该给的资源就给,该批评的地方就要指出来。你委屈了自己,谁都不会为你撑腰。【备注:文末可领最新资料】

算法题:掉落的方块

今天我来跟大家聊聊一个经典的算法题:掉落的方块。这个题目看似简单,实际上却能帮助我们理解一些基础的算法思想,尤其是对于如何处理二维数组和模拟问题的思路。来,咱们一起看看这个题目!

题目大意

想象一下,你正玩一个类似俄罗斯方块的游戏。在游戏中,方块从顶部掉落,最终会停留在某一行,具体停留在哪一行取决于下面的空位情况。我们需要模拟这个过程,最终得到方块停下的位置。

假设我们的游戏区域是一个二维矩阵,宽度为 W,高度为 H,每个方块占据一个单元格,掉落的方块以列的方式掉下来,方块的“掉落”是根据每一列的空位情况来决定的。我们的目标是给定每个方块的掉落位置,计算最终它停留在哪一行。

解题思路

我们可以把这个问题当做是一个二维数组的操作问题。每一列的方块掉落时,它都会停留在该列最低的空白单元格。我们需要维护每一列的“高度”,即每列上方还有多少个方块。

为了简化问题,我们可以这样做:

  1. 使用一个数组 heights 来记录每一列当前的高度。
  2. 每次方块掉落时,根据 heights 数组来判断它停留在哪一行。
  3. 更新该列的 heights 值,表示这个位置已被占据。

Python代码实现

让我们直接用代码来实现这个算法。

def fallingBlocks(w, h, positions):
    # heights数组,用来记录每列的当前高度
    heights = [0] * w
    result = []

    # 遍历每一个掉落的方块位置
    for pos in positions:
        # 计算该位置的掉落行数
        drop_row = heights[pos]
        result.append(drop_row)
        # 更新该列的高度
        heights[pos] += 1

    return result

# 示例
w = 5  # 游戏区域宽度为5
h = 6  # 游戏区域高度为6
positions = [1, 2, 2, 3, 0, 1, 3, 3]

print(fallingBlocks(w, h, positions))

代码解释

  1. heights 数组:记录每一列当前的高度。初始时,所有列的高度都为 0。
  2. positions 数组:表示每个方块掉落的位置。每次方块掉落时,根据掉落位置确定它停留的行。
  3. 更新 heights 数组:每次掉落后,我们需要更新掉落列的高度,这样下一次掉落时就能知道该列空余的位置。

运行示例

假设我们的游戏区域宽度是 5,高度是 6,方块掉落的顺序为 [1, 2, 2, 3, 0, 1, 3, 3],也就是说:

  1. 第一个方块掉落到列 1(从 0 开始索引),它会停在第 0 行。
  2. 第二个方块掉落到列 2,停在第 0 行。
  3. 第三个方块掉落到列 2,会停在第 1 行,因为第 0 行已经有方块了。
  4. 第四个方块掉落到列 3,停在第 0 行。
  5. 第五个方块掉落到列 0,停在第 0 行。
  6. 第六个方块掉落到列 1,会停在第 1 行。
  7. 第七个方块掉落到列 3,停在第 1 行。
  8. 第八个方块掉落到列 3,停在第 2 行。

最终,方块的停留位置为:[0, 0, 1, 0, 0, 1, 1, 2]。

时间复杂度分析

这个解法的时间复杂度是 O(n),其中 n 是方块的总数。我们需要遍历每一个方块的位置,查找它所在列的当前高度并更新它。由于每个操作是常数时间操作,所以总的时间复杂度是 O(n)。

空间复杂度分析

空间复杂度是 O(w),其中 w 是游戏区域的宽度。我们使用了一个大小为 w 的数组来记录每列的高度。

总结

这个题目通过模拟方块掉落的过程,帮助我们理解如何处理二维数组以及如何管理每列的状态。关键是维护一个 heights 数组,这个数组帮助我们跟踪每一列的空位情况,从而确定方块的掉落位置。其实,这种问题在游戏开发中很常见,理解了这个思路,对以后处理类似问题会很有帮助。

希望大家通过这个题目,也能对模拟和二维数组的处理有更深的理解!😎

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

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

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