程序员老鬼

发烧38度请假被 HR 辱骂长达1个多小时后劝退。。

刚看到个贴子,有网友发烧快38度请假,结果被HR骂了一个多小时,飞书账号还被删,绩效直接清零,简直离谱🫠

Image

我觉得这事吧,不是情绪不情绪的问题,这是基本人权和职业道德的底线被踩了。你可以不满意员工的请假频率,可以追求绩效,但对一个生病的人这样冷血处理,真的是职场毒瘤的典范。

有些人评论说“工作就该扛住压力”,但这不是压力,这是赤裸裸的PUA和打压。公司不是慈善机构没错,可员工也不是奴隶。

换个角度想,如果一个团队不能容纳一两个突发状况的员工,那本质上是管理能力的问题。

每个打工人都能在尊重中上班,在良知中离开。【备注:文末可领最新资料】

算法题:数字 1 的个数

说起“数字1的个数”这个算法题,兄弟们是不是一瞬间想起了那个看似简单实则烧脑的题——给你一个整数n,返回从1到n之间所有数字中1出现的次数。讲真,刚看到这题我当年一脸懵逼:“这不就暴力遍历呗?”然后真这么干了,果不其然面试官露出了一丝冷笑🙂。

咱先来复现一下暴力思路:

publicintcountDigitOne(int n){
int count = 0;
for (int i = 1; i <= n; i++) {
int num = i;
while (num > 0) {
if (num % 10 == 1) count++;
            num /= 10;
        }
    }
return count;
}

这玩意儿吧,小数据还行,大一点直接爆炸,时间复杂度O(n log n),算法题这么写你分分钟出局。那怎么办?得用点数位分析的套路。

来看正解思路,假设我们分析每一位上1出现的次数,像个位、十位、百位这样一位一位地分析。比如:

假设我们现在分析某一位是“k”,以个位为例(k=1),对一个数,比如n = 3141592,我们可以把它拆成三部分:

  • high 高位,也就是k位左边的数字
  • cur 当前位
  • low 低位,也就是k位右边的数字

具体到代码:

publicintcountDigitOne(int n){
int count = 0;
for (long i = 1; i <= n; i *= 10) {
long high = n / (i * 10);
long cur = (n / i) % 10;
long low = n % i;

if (cur == 0) {
            count += high * i;
        } elseif (cur == 1) {
            count += high * i + low + 1;
        } else {
            count += (high + 1) * i;
        }
    }
return count;
}

这个写法就很秀了,时间复杂度直接降到O(log n),而且没啥内存开销。重点是你能装杯讲出这个逻辑:“我这个是基于数位拆分的贪心处理,每一位上都独立考虑1的出现次数。”

要我说啊,这种题就是典型的“会的觉得so easy,不会的咋都绕不出来”。背后其实是数位DP或者枚举位值变化的思想,但讲DP面试官未必爱听,讲枚举拆解他就觉得你思路清晰,实用派👍。

所以兄弟们,别被“数字1的个数”这种题唬住了。你得学会的,不是怎么循环数字,而是怎么从一个数学问题里抽象出规律、构建模型。真正的技术人,脑子得是模块化加缓存策略的😎。

哦对了,记得面试时别上来就讲暴力解,有时候面试官会故意引导你往低效方案走,看你会不会跳出来。套路他们一下,也挺爽的🤣。

以后再遇到这种“统计某个数出现次数”的题型,直接数位拆分+分类讨论走起!你要是连这都玩不转,怎么在实战中跟日志分析、异常告警这些“实用算法”斗智斗勇?

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

-END-

最后给大家分享一份不错的副业资料,感兴趣的同学可以链接我,微信:hls404 找我领取。