放弃大厂和电网选择上岸广州gwy,不得不说现在过得都是神仙日子啊
刚看到个贴子,说有人放弃大厂和电网,跑去广州考上公务员,现在日子过得特别舒服,钱也不少,还感慨以前实习受的苦全都不值。
作为程序员,我觉得这种选择挺能理解的。大厂就像无尽的 for 循环,任务一个接一个,永远没有 break;而公务员更像是写个定时任务,稳定运行,偶尔优化一下流程就行。网友们有的羡慕,有的觉得浪费技术,其实方向不同,没啥对错。
从我的角度看,写代码最大的痛苦不是 bug,而是需求反复横跳+加班压榨。大厂的钱多,但你常常像个高并发系统,CPU 过热;而公务员虽然没那么“炫酷”,但起码内存占用低,生活不卡顿。稳定本身就是一种价值。
所以啊,选大厂还是选体制,说到底是优先级问题:有人要高性能,有人要稳定性。能找到适合自己的架构,才是最优解。【备注:文末可领最新资料】
算法题:给定数字能组成的最大时间
昨天晚上十一点多,在公司楼下吹了会儿风,手机一震,群里小李丢了道面试题过来:”四个数字,能不能拼出最大的24小时制时间?就是那个…嗯…HH:MM 那个格式。“我困得眼睛都直了,但这题我见过,顺嘴跟他聊了聊。
别绕弯子了哈,这题数据量小得离谱,4 个数字也就 4! = 24 种排列。暴力枚举——对,就是把四个位置全试一遍。每次拿前两位当小时、后两位当分钟,检查下小时 < 24 且分钟 < 60,合法就更新最大值。最大值怎么比?用总分钟数 hour * 60 + minute,比较起来不费脑子。 有人会问能不能贪心?比如先挑最大的能放在十位小时上…呃,容易被 2、4、5 这种边界绕晕,24 种全试其实更干净。
一个是格式问题:要补零,“09:05” 不能写成 “9:5”。另一个是“完全拼不出时间”要返回空串,不要随手给个 "00:00",不对劲。 对了,重复数字?无所谓,枚举照样跑,最多也就 24 次。
import java.util.*;
publicclassLargestTime{
public String largestTimeFromDigits(int[] A){
int[] best = {-1}; // 存最大总分钟
permute(A, 0, best);
if (best[0] < 0) return"";
int h = best[0] / 60, m = best[0] % 60;
return String.format("%02d:%02d", h, m);
}
privatevoidpermute(int[] a, int idx, int[] best){
if (idx == 4) {
int h = a[0] * 10 + a[1];
int m = a[2] * 10 + a[3];
if (h < 24 && m < 60) {
int total = h * 60 + m;
if (total > best[0]) best[0] = total;
}
return;
}
for (int i = idx; i < 4; i++) {
swap(a, idx, i);
permute(a, idx + 1, best);
swap(a, idx, i);
}
}
privatevoidswap(int[] a, int i, int j){
int t = a[i]; a[i] = a[j]; a[j] = t;
}
// 随手写个 main 方便跑一下
publicstaticvoidmain(String[] args){
LargestTime lt = new LargestTime();
System.out.println(lt.largestTimeFromDigits(newint[]{1,2,3,4})); // 23:41
System.out.println(lt.largestTimeFromDigits(newint[]{5,5,5,5})); // ""
System.out.println(lt.largestTimeFromDigits(newint[]{0,0,1,0})); // 10:00
}
}
时间复杂度固定 24 次校验,常数级;空间用的是递归调用栈和几个临时变量,也就 O(1)。面试官再追问,你就补一句:输入规模固定,暴力是最优工程解。
要是题目换成 12 小时制?把校验改成 h >= 1 && h <= 12;如果数字不止 4 个,要从一堆数字里挑 4 个拼最大时间,那就先排序再剪枝,或者直接在回溯里限制分支(比如十位小时大于 2 的直接砍掉)。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html