程序员老鬼

4名程序员泰国维护赌博网站,月薪32万,结果很刑~

刚刷到个新闻,说泰国那边抓了4个中国程序员,他们给跨国赌博网站做技术支持,拿着“学生签证”掩护身份。收入呢,一个月大概32万人民币,外加项目奖金,确实看着很诱人。

Image

从程序员角度讲,这些活儿其实就是写代码、维护系统,换成正常互联网公司,可能就几十K工资。但问题在于,他们的“客户”是赌博平台,本身就是违法产业。你写的每一行代码,不是服务用户体验,而是帮助庄家收割。就像写了个功能强大的黑科技,但拿去用在了“歪门邪道”。

我看网友评论,有人羡慕高薪,有人说活该被抓。我的想法是:高薪≠好薪,钱是“带毒”的,就像内存里的bug,迟早会爆出来。程序员再懂优化,再能写高并发系统,也得考虑代码的价值观。合法合规的收入,才是真的能长久运行的程序。

总的来说,技术无罪,但人要对选择的方向负责。【备注:文末可领最新资料】

算法题:翻转等价二叉树

昨晚十一点多回家路上,手机叮一下,小李问我“哥,那个翻转等价二叉树到底咋判定啊”,我脑子里过了一遍,想想这题其实不凶,关键是别把“翻转”俩字想复杂了。咱就按聊天的劲儿,把它掰开捋顺,最后给你一段能直接提交的 Java 代码。

有两棵二叉树 A 和 B,你可以对任意节点做“交换左右子树”的动作,想做几次都行。问:能不能通过若干次这样的翻转,把 A 变成 B。能就说“等价”,不能就“拜拜”。注意翻转不改变节点值,只是把左和右互换。

如果两个根节点的值都不一样,那还聊啥,肯定不等价。值一样呢?那就比孩子。孩子的比法有两种情况: 1)不翻转就能对上:A.left 对 B.left,A.right 对 B.right; 2)翻一下才能对上:A.left 对 B.right,A.right 对 B.left。 只要有一种成立,这俩子树就算过关。整棵树就递归干这个事。

先处理几个边界: 两个节点都空——等价;一个空一个不空——不等;值不等——不等。 然后就是“无翻转匹配”或“有翻转匹配”二选一。用或连接就行。深度优先一直下沉,直到叶子或空指针收场。

每个节点最多被比较常数次,整体 O(n),n 是节点数。递归栈最坏 O(h),h 是树高,退化链表时就是 O(n)。这题很吃“短路”效果,前面对上了就不会去走后面的分支,写法上用 || 别用 if 嵌套太狠,逻辑更直白。

// LeetCode 风格的定义
classTreeNode{
int val;
    TreeNode left, right;
    TreeNode() {}
    TreeNode(int v) { val = v; }
    TreeNode(int v, TreeNode l, TreeNode r) { val = v; left = l; right = r; }
}

classSolution{
publicbooleanflipEquiv(TreeNode root1, TreeNode root2){
// 都空,算等价
if (root1 == null && root2 == null) returntrue;
// 只有一个空,或者值不同,不等
if (root1 == null || root2 == null || root1.val != root2.val) returnfalse;

// 情况一:不翻转也能对齐
boolean noFlip = flipEquiv(root1.left, root2.left)
                      && flipEquiv(root1.right, root2.right);

// 情况二:翻转后才能对齐
boolean flip = flipEquiv(root1.left, root2.right)
                    && flipEquiv(root1.right, root2.left);

return noFlip || flip;
    }
}

假设 A 的根是 1,左 2 右 3;B 的根也是 1,左 3 右 2。那根值相等,往下看:A.left(2) 对 B.right(2) 能对上,A.right(3) 对 B.left(3) 也能对上,于是整棵树等价。你看,这就属于“翻一下就好”的那类。

有朋友会在空指针处犹豫,其实空和空才等价,空和非空一票否决;还有人喜欢先翻再比——不必,代码里已经把“翻”和“不翻”的两种匹配都考虑了。再有,别想着用排序孩子值这种投机取巧,树结构会被你弄丢,值相同但结构不同会误判。

这题的关键词就两点:值要相等、孩子要“无翻或有翻”二择一能匹配。把这俩牢记,递归就像顺楼梯一样自然。行了,我去泡杯茶,你把上面的代码丢到评测里跑一跑,过了给我发个“已 AC”。

-END-

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

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