男朋友是程序员,但是工作不稳定,有必要跟他结婚吗?
刚刷到个贴子:女生吐槽自己男朋友是程序员,但工作总不稳定,她纠结要不要结婚 。
我觉得这事吧,婚姻里“稳定”确实很重要,但稳定不一定等于铁饭碗。网友们的回复我看了看,有人劝分,说以后日子难过;也有人觉得程序员收入还不错,换工作频繁也正常。其实关键在于,这个男朋友有没有上进心和抗风险的能力。💡
换个角度想,现在互联网行业波动大,跳槽不代表不靠谱,反而可能是为了寻找更好的发展。如果他能不断提升技术,保持竞争力,就算工作环境不稳定,也能给生活带来保障。相反,如果只是频繁辞职又没有规划,那确实要慎重考虑了【备注:文末可领最新资料】
算法题:奇妙序列
昨晚十一点多在公司楼下喝奶茶,手机还在响,有人问我那个“奇妙序列”怎么写。我就边吹夜风边想,这玩意儿其实不难,就是有点拗口:它自己描述了自己,像一份会念叨的清单,读着读着就把后面该长成啥给念出来了。
给你一个正整数 n,有个只包含 1 和 2 的序列 S,从 “1 2 2 1 1 2 1 2 2 …” 开始。神奇点在于:从序列头开始数,把连续相同数字的“长度串起来”,又会得到 S 自己。我们要算前 n 个数字里,有多少个 1。就这,一个数数题,但别小瞧,写挫了会超时。
你别真去压整串再压一次,那是自找累。思路像带娃排队:手里拿着一个“读指针”i,读到 S[i] 就知道“接下来要往序列尾巴追加的数字,数量是多少”。而“要追加哪个数字”呢?就轮流来:1、2、1、2… 交替着加。这样只走一遍,顺手统计 1 的个数,复杂度 O(n),空间 O(n)(用数组或列表存前 n 个就够)。
两个小点:1)读指针和写指针别混。读的是“要加多少”;写是“往后加几次”。2)计数别越界,别把超过 n 的部分也算进 1 的数量里。
publicclassMagicalSequence{
// 返回奇妙序列前 n 个数字里 1 的个数
publicintmagicalOnes(int n){
if (n <= 0) return0;
if (n <= 3) return n == 1 ? 1 : n - 1; // 序列起点 "1,2,2"
// 用 int[] 存更快,容量开到 n 足够
int[] s = newint[n + 5];
s[0] = 1; s[1] = 2; s[2] = 2; // 初始化 "1,2,2"
int write = 3; // 下一个要写入的位置
int read = 2; // 读指针:告诉我们接下来要写几次
int next = 1; // 交替要写的数字:先写 1,然后 2,然后 1...
int ones = 1; // 已有的 1 的数量(前3项里只有一个 1)
while (write < n) {
int times = s[read++]; // 本轮要写 times 次 next
for (int k = 0; k < times && write < n; k++) {
s[write++] = next;
if (next == 1) ones++;
}
// 数字在 1 和 2 之间切换
next = (next == 1 ? 2 : 1);
}
return ones;
}
// 小测一下
publicstaticvoidmain(String[] args){
MagicalSequence ms = new MagicalSequence();
System.out.println(ms.magicalOnes(1)); // 1
System.out.println(ms.magicalOnes(6)); // 前6项: 1,2,2,1,1,2 -> 1的个数=3
System.out.println(ms.magicalOnes(20)); // 随便看看
}
}
因为我们只按“读出来的段长”直接写,不重复扫描段边界;而且 1 和 2 交替是常数开销,统计 1 的时候顺手来一刀就好,没多余结构。
能不能不用 O(n) 空间?可以,把读过的段长立刻丢了,只保留“读指针之前的值”和“窗口里还剩几次要写”,能做到 O(1) 额外空间,但实现更绕,面试里这版已经够稳。行了不啰嗦,我去热条牛肉卷,回头谁要把它改成 Kotlin 也行。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html