程序员老鬼

面试被打成骨折!因不满面试官的无礼态度,与其争辩了几句,便遭其殴打致腰椎骨折,面试官已被刑拘。。

刚看到个离谱新闻😡:深圳一位刘女士面试时,跟面试官因为态度问题争辩了几句,结果竟被约到厕所围殴,导致腰椎骨折,手机还被抢!面试官现在已被刑拘。

Image

作为程序员,我第一反应是——这代码质量直接报错到“人性漏洞”级别了。面试是双向选择,不合适最多是流程终止,升级到人身伤害,这已经不是职场问题,而是刑事案件。

网友有说“遇到不尊重就怼回去”,但现实里,像我们跑项目遇到烂需求,情绪再炸也得留证据、走流程,因为数据可恢复,骨头可没法回滚。还有人说“面试就该带录音”,我觉得这倒真是个防御机制——就像上线前加监控,能及时抓包异常。

换句话说,尊重是最低配置,安全是最高优先级。无论什么行业,先确保自己人身安全,再谈职业发展,这才是最优解。【备注:文末可领最新资料】

算法题:二叉树最长连续序列

这个题啊,其实我第一次看到是在公司楼下抽烟的时候,有个后端小伙问我的。他说刷LeetCode刷到这道题,卡了一个多小时,心态差点崩了。我当时就笑,说这东西其实没那么玄乎,理解了就是一棵树上找“递增的路径”,只不过路径要连续。

问题大致意思

给你一棵二叉树,每个节点有一个整数值,让你找从父节点到子节点的连续递增序列的最长长度。比如父节点是 3,子节点是 4,再往下是 5,这就算连续的。

注意几个坑点:

  1. 连续是指值正好加 1,不是大于就行。
  2. 只能从父到子,不能回头走。
  3. 不一定从根开始,中间某个节点也可能是最长的起点。

思路分析

我当时跟那个小伙说,你就想象一下,从每个节点往下走,看看能延续多久。如果子节点的值正好是父节点+1,那长度就加一;否则,就从1重新开始计数。

这里用**DFS(深度优先搜索)**是比较自然的,每到一个节点,我们把当前长度传下去,并且在子节点继续判断。如果不连续,就重置长度。

另外一个小技巧:我们不需要额外记录路径,只用记录一个全局的最大值。

代码实现(Java版)

classSolution{
privateint maxLen = 0;

publicintlongestConsecutive(TreeNode root){
if (root == null) return0;
        dfs(root, null, 0);
return maxLen;
    }

privatevoiddfs(TreeNode node, TreeNode parent, int length){
if (node == null) return;

if (parent != null && node.val == parent.val + 1) {
            length++;
        } else {
            length = 1;
        }

        maxLen = Math.max(maxLen, length);

        dfs(node.left, node, length);
        dfs(node.right, node, length);
    }
}

// 二叉树节点定义
classTreeNode{
int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

举个例子

比如有这么一棵树:

    1
     \
      2
       \
        3

跑下来,父子节点都是连续的,长度就是 3。

如果是:

    2
   / \
  3   2
     /
    3

最长路径是 2 -> 3,长度为 2,虽然有两个地方出现 2 -> 3,但最长值不变。

时间和空间复杂度

  • 时间复杂度:O(n),每个节点访问一次。
  • 空间复杂度:O(h),h是树的高度(递归栈)。

这道题其实考的不是算法多复杂,而是你对DFS状态传递的熟练程度。很多人一开始会想着把路径存下来,其实没必要,传个长度就行。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404