Python技术迷

大厂员工吐槽:不是35岁,我们部门招od的说30岁以上的简历就不看了。除非很优秀的

最近在网上看到一条爆料,简直让我想到了很多程序员的心酸历程。

华子的员工爆料说:我们部门招聘OD的岗位,不是35岁,而是30岁以上的简历都直接“pass”掉,除非你特别优秀,其他的直接没戏。👀

Image

老实说,这个情况在许多企业并不罕见,尤其是互联网行业。大家都知道,程序员这个行业的“黄金年纪”似乎就在30岁之前,过了30岁,仿佛就成了“老古董”。

其实,背后反映的,除了对年龄的偏见,还有那种“求新求变”的企业文化。

不过,说真的,这种情况给大家带来的压力也很大,尤其是已经30+的我们。都说职场如战场,可这场“年龄战”又该怎么打呢?大家有啥好的建议吗?来一起聊聊吧~【备注:文末可领最新资料】

算法题:单调递增的数字

今天想和大家聊聊一个有趣的算法题:单调递增的数字。

什么是单调递增的数字?

在我们开始动手之前,先明确一下问题的定义:一个数字如果它的每一位数字从左到右是单调递增的,那么这个数字就是单调递增的。举个简单的例子,2345 是单调递增的,但 5432 就显然不是。

例如:

  • 123 是单调递增的(1 < 2 < 3)。
  • 321 就不是单调递增的(3 > 2 > 1)。

简单来说,我们要写一个函数,判断一个数字是不是单调递增的。

题目分析

从思路上看,我们要做的就是遍历数字的每一位,并且确保从左到右的顺序是递增的。如果某一位数字比它前一位数字小,那么我们可以立马判断这个数字不是单调递增的,直接返回 False。否则,遍历完所有数字都符合递增条件,返回 True。

看起来好像是个很简单的事儿,但如果考虑到不同的输入情况,咱们的代码可得严谨一些——比如负数、零等特殊情况,我们都需要提前处理好。

代码实现

来,话不多说,直接用 Python 代码实现一下:

def is_monotonic(n: int) -> bool:
    # 转换成字符串,方便逐位比较
    num_str = str(n)

        # 遍历字符串中的每一位,检查每两位的大小关系
    for i in range(1, len(num_str)):
        if num_str[i] < num_str[i - 1]:
            return False
    return True

# 测试代码
print(is_monotonic(123))  # 输出: True
print(is_monotonic(321))  # 输出: False
print(is_monotonic(12345))  # 输出: True
print(is_monotonic(54321))  # 输出: False

解释

这个函数的做法很直接。首先,将输入的数字转为字符串,这样就能逐位比较数字的大小了。我们从第二个数字开始,依次和前一个数字进行比较。如果发现某一位数字小于前一位数字,那就可以判断这个数字不是单调递增的,直接返回 False。如果遍历完成都没发现问题,返回 True。

时间复杂度分析

这个问题的时间复杂度其实是 O(n),其中 n 是数字的位数。我们只需要遍历数字的每一位一次,因此时间复杂度非常高效。而空间复杂度是 O(k),其中 k 是数字的位数,这是因为我们将数字转成了字符串,字符串的空间是与数字的位数成正比的。

改进思路

虽然上面的代码已经很简洁了,但如果我们不想把数字转成字符串来处理,其实也可以通过数学的方式解决。这样不仅避免了额外的空间开销,还可以直接处理数字本身。

比如我们可以用 n % 10 获取最后一位数字,然后不断除以 10 来获取每一位数字。这种方式能够避免字符串转化,完全是数值操作。

def is_monotonic(n: int) -> bool:
    prev_digit = n % 10
    n //= 10

        while n > 0:
        current_digit = n % 10
        if current_digit > prev_digit:
            return False
        prev_digit = current_digit
        n //= 10
    return True

# 测试代码
print(is_monotonic(123))  # 输出: True
print(is_monotonic(321))  # 输出: False

这个版本不需要将数字转成字符串,而是直接通过数学操作来进行比较。通过这种方式,代码不仅优化了空间复杂度,还能进一步提升处理效率。

总结

这个问题其实很简单,但它帮助我们理解了如何有效地遍历数字的每一位并进行比较。通过这个问题,你可以加深对算法的理解,同时也能锻炼你的代码实现能力。其实很多时候,算法题看似简单,但细节和思路上的变化却能带来不同的挑战。

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

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

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