一手带大的校招生,一直当亲嫡系在栽培,才入职不到4年就提了离职,怎么办?网友评论:你还想让人跟你干一辈子?
最近刷到一篇帖子,有点唏嘘,也有点现实。
有人发帖说:“一手带大的校招生,一直当亲嫡系在栽培,才入职不到4年就提了离职,怎么办?”下面评论区直接杀疯了:
👉有网友直接开怼:“你还想让人跟你干一辈子?所谓栽培,说到底也只是各取所需。”
👉也有人说得很扎心:“四年还不够?你该不会是觉得别人该以身相许吧?”
我觉得吧,这种“我对你有恩你不能走”的逻辑真的挺窒息的。栽培新人本来就是职场常态,愿者上钩,各自拿所需。新人要的是成长机会,老员工要的是人手支援,咱们就别往深情那条路上扯了,听起来像是在谈恋爱。
况且现在跳槽周期快得跟换手机差不多,四年在一个地方都快算资深了。真有心栽培,就该祝福人家飞得更远,而不是在背后喃喃自语“我为你付出了那么多”😭。兄弟,不是所有离开都是背叛,有时候只是下一站刚好有空座。【备注:文末可领最新资料】
算法题:完美矩形
局长
事情的起因是这样的——某天在地铁上刷到一道题,题目大概说,有一堆小矩形,说是如果这些矩形完美地拼成了一个大矩形,那就返回 true,否则返回 false。我一看,这还不简单?坐下就想写个面积加和对比,结果……差点翻车😅。
完美矩形不是说面积对得上就完事儿了,那是完美骗子。
先说下题目要求:给你若干个矩形,每个矩形用 [x1, y1, x2, y2] 表示,表示左下角和右上角的坐标。判断它们是否能完美拼接成一个不重叠不缺口的大矩形。
很多同学第一反应就是:面积啊!求所有小矩形面积,加起来和最大的外包矩形比一比,不就完了吗?
inttotalArea=0;
intminX= Integer.MAX_VALUE, minY = Integer.MAX_VALUE;
intmaxX= Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
for (int[] rect : rectangles) {
intx1= rect[0], y1 = rect[1], x2 = rect[2], y2 = rect[3];
totalArea += (x2 - x1) * (y2 - y1);
minX = Math.min(minX, x1);
minY = Math.min(minY, y1);
maxX = Math.max(maxX, x2);
maxY = Math.max(maxY, y2);
}
intexpectedArea= (maxX - minX) * (maxY - minY);
return totalArea == expectedArea;表面看没毛病,实际上大有问题——重叠你看不出来,缺口你也感知不到!
打个比方,拼图你拼对了面积,但拼图块盖住了别的块,或者某个角没拼上,这你怎么知道?🤯 所以就靠面积比大小是不靠谱的。
于是,得加点判断逻辑。我们换个思路:从边界的角落入手,记录所有矩形的四个顶点,最后看是否只剩下四个角,且它们刚好是最大矩形的四个角。
每个矩形会带来四个顶点,如果这些点内部重合,会正好被抵消掉(即成对出现),只有最外围的四个角是单独存在的。所以,我们可以用一个 Set<String> 记录每个点,如果点已经在里面了就移除(抵消),否则就加进去。
Set<String> points = newHashSet<>();
inttotalArea=0;
intminX= Integer.MAX_VALUE, minY = Integer.MAX_VALUE;
intmaxX= Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
for (int[] rect : rectangles) {
intx1= rect[0], y1 = rect[1], x2 = rect[2], y2 = rect[3];
totalArea += (x2 - x1) * (y2 - y1);
minX = Math.min(minX, x1);
minY = Math.min(minY, y1);
maxX = Math.max(maxX, x2);
maxY = Math.max(maxY, y2);
String[] corners = {
x1 + " " + y1, x1 + " " + y2,
x2 + " " + y1, x2 + " " + y2
};
for (String point : corners) {
if (!points.add(point)) {
points.remove(point);
}
}
}
intexpectedArea= (maxX - minX) * (maxY - minY);
if (totalArea != expectedArea) returnfalse;
if (points.size() != 4 ||
!points.contains(minX + " " + minY) ||
!points.contains(minX + " " + maxY) ||
!points.contains(maxX + " " + minY) ||
!points.contains(maxX + " " + maxY)) {
returnfalse;
}
returntrue;这个逻辑就比较周全了:既判断了面积,又确保了角点合法,没有重叠也没缺角。用一句老程序员的话来说,这种题就得多留个心眼,不然拍脑袋下判断,出 bug 跟呼吸一样自然。
另外,这题还有一点小细节值得注意,比如 Set 里的点拼接不能直接用 Point 或者数组,要不你得写 equals 和 hashCode,不然就出幺蛾子。咱写算法题图快,字符串拼一拼就完事了,别整花活。
有个同事看完我写的解法还挺震惊:“原来还可以这样处理顶点!我之前只想着面积了,老是过不了。”我说:“对啊,你得想象你是拼图大师,不能只盯着面积,还得看拼图的‘边角料’。”
程序员这活吧,经常得从别人想不到的角度去琢磨问题。有时候你以为是数学题,其实考的是你能不能发现“别扭”的地方。
好了,今天的代码就写到这。大家写算法题的时候,多走两步,多想一步,面试官也能看到你思路的清晰和严谨,别总想着蒙混过关,这年头面试官都不是吃素的
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。