我突然接到领导的电话,问我愿不愿意到越南icon上班,工资3.5w,合同期限5年,双倍年终。。。能去吗?
昨天刷帖的时候看到一个程序员哥们发的经历,属实让我狠狠陷入沉思。
事情是这样的——晚上接到领导电话,开口就给了个大礼包:“去越南icon工作,工资3万5,5年合同,双倍年终奖。”哥们一听,瞬间精神了,但又有点发懵,就问:“为啥选我?”
领导语气超诚恳:“你不是说准备买房吗?5年挣一套,不香吗?”
我看到这段的时候直接乐了,房价面前无感情,谁还不是为房子打工的打工仔呢?
工资这么香,他当然心动啊,但越南这个选项让他纠结。毕竟不是国内,说白了,就是一个人去异国他乡,语言、环境、饮食、孤独感……这不是钱多就能糊过去的。
评论区的网友也热闹得很,有人说:“越南也有星巴克和Wi-Fi,怕啥?”还有人留言:“你要是去了,房子是有了,人没了。”(这哥们估计被异地出差伤得不轻)
我觉得吧,关键看你对“换钱买孤独”这件事的接受程度,越南的火锅吃起来啥味咱不知道,但孤独那味儿一定浓。
你们怎么看?要是你,去还是不去?【备注:文末可领最新资料】
算法题:存在重复元素 III
这题一看名字我就头疼,“存在重复元素 III”?光这名字,就像 HR 问你“你最大的缺点是什么?”你知道是陷阱,但你还得硬着头皮回答。
题目大意说得其实挺简单的:
给你一个整数数组 nums,判断是否存在下标 i 和 j,满足:
• abs(nums[i] - nums[j]) <= t• abs(i - j) <= k
看到这两个条件,我脑子里直接浮现出一句话:距离不远,值还要接近,这怕不是在相亲交友软件里刷对象呢。
我一开始也傻愣愣地想:暴力不就完了嘛,两层 for 循环,谁离得近、值又相近,就 return true。写起来像这样:
for (inti=0; i < nums.length; i++) {
for (intj= i + 1; j <= i + k && j < nums.length; j++) {
if (Math.abs((long)nums[i] - nums[j]) <= t) {
returntrue;
}
}
}
returnfalse;结果运行一看,🤡——超时了。
兄弟,你是来面试字节跳动的,不能写出 O(n²) 的暴力,得优化。那怎么办?聪明点,滑窗 + 平衡树上场。Java 没有 TreeSet 你怎么玩?
好消息是,Java 有 TreeSet,而且它提供了 ceiling() 和 floor() 这两个方法,简直就是为这道题量身定做的。
来看优化版代码:
publicbooleancontainsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet<Long> set = newTreeSet<>();
for (inti=0; i < nums.length; i++) {
Longfloor= set.floor((long) nums[i] + t);
Longceil= set.ceiling((long) nums[i] - t);
if ((floor != null && floor >= nums[i]) || (ceil != null && ceil <= nums[i])) {
returntrue;
}
set.add((long) nums[i]);
if (i >= k) {
set.remove((long) nums[i - k]);
}
}
returnfalse;
}这段代码的意思是啥呢?你就把它想成一个“交友匹配系统”,你把当前人加入滑动窗口,同时检查一下这个窗口里有没有和他“价值观”(数值差)相近、又离得不远(下标差)的朋友。
TreeSet 在这就像“红娘”一样,高效地帮你匹配最合适的对象,复杂度从 O(n²) 降到了 O(n log k),系统都不卡了👍。
当然啦,如果你更 hardcore 一点,还可以上桶排序优化,思路也不复杂:把值分桶,每个桶宽度是 t + 1,保证桶内差值最大不超过 t,然后滑窗控制桶的数量在 k 个以内。
但实话说,写桶排序需要精细的边界控制,一不小心就踩空,像我朋友那样面试现场写挂了,最后连“谢谢参与”都没听到。TreeSet 在真实开发和面试中用着顺手多了。
我觉得这题最容易掉坑的点是:整数溢出。比如你写 Math.abs(nums[i] - nums[j]),如果 nums[i] = Integer.MIN_VALUE,那你就会悲剧了。所以像上面那样,全都转成 long 是必须的,别偷懒。
说一句现实话:写算法题就像谈恋爱,别总想着用 brute force 强行搞定,有时候你得换个思路,优雅点解决问题,像 TreeSet 就是那个“优雅地拒绝 for 循环暴力”的存在。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。