专栏名称: Java极客技术
Java 人的社区,专注 Java 一百年!
目录
相关文章推荐
51好读  ›  专栏  ›  Java极客技术

学会了这个,实习生小妹被我撩的一愣一愣的

Java极客技术  · 公众号  ·  · 2020-04-16 07:30

正文

请到「今天看啥」查看全文


每天早上 七点三十 ,准时推送干货

Photo by allison christine on Unsplash

Hello,大家好,我是鸭血粉丝,最近阿粉所在的公司来了一位应届大学生来实习,前面都不是重点,重点是这个大学生是个妹子!!!

大家都知道的,在这个狼多肉少的 IT 行业里,能够遇到一位程序媛,都是想着和妹子搭搭话。

阿粉也想和妹子搭搭话,但是有些木讷的我不知道和妹子聊啥。突然想到妹子不是个应届生嘛,肯定有些知识是不基础的,这不今天早上阿粉的装逼机会就来了。

阿粉:小兰啊(这是那个妹子的名字),假设现在 x = 4 , y = 1 ,现在让 x 和 y 的值互换一下,也就是 x = 1 , y = 4 ,你会用什么方法来实现呢?

小兰:吼,小哥哥你是看不起我嘛?这么简单的题我还是会的,来个中间变量 temp ,然后: temp = x; x = y; y = temp; 这样就让 x 和 y 的值互换了,我是不是很聪明

阿粉:你这样实现是没错,但是借助了中间变量呀,如果我不让使用中间变量来实现呢?

看到妹子陷入了思考之中,我在心里开始得意的笑,哈哈哈

但是没想到妹子两分钟就给出了解决方案: x = x + y; y = x - y; x = x - y; ,嗯,这个小姑娘确实可以,但是阿粉有更好的方法,要不怎么在妹子面前装逼呢

阿粉:这个方法很棒,没有借助中间变量就实现了。还有没有其他方法呢?可以显得高大上那种?

只见妹子抓耳挠腮了很久,还是没想出来。这个时候暖男阿粉就出手了

阿粉:其实还有一种方法实现,那就是使用 异或 。还是以这个题为例,我这样写也可以达到目的: x = x^y; y = x^y; x=x^y;

小兰:我读书少,你可别骗我啊,这三行代码除了前面 x,y 不一样之外,后面的内容是完全一样的嘛,这怎么就互换了呢?

阿粉:那我问你啊,什么是异或呢?

小兰:这个我清楚,异或的意思就是,如果两个值相同,那异或之后的结果就是 0 ,如果两个值不同,那异或之后的结果就是 1 。如果一个值和 0 异或,那么结果还是原来的值。

阿粉:完全正解!那你看一下这几行代码,我先让 x = x^y ,然后 y = x^y ,此时的 y 是不是就是 y = x^y^y ,你刚才不是说,两个值相同的话,异或之后的结果就是 0 ,那 y 是不是就等于 x 了?

小兰:哈,还真是啊。最后一个 x = x^y 就是 x = x^x^y 也就是 x = y 了。这样就实现了两个值互换了

阿粉:对,是这个样子的。为了检测一下你是不是真的学到了,我再给你出个题吧,这个题目在 LeetCode 上也算是一个经典题目了,怎么样,要不要挑战一下?

小兰:当然要挑战了!

阿粉:好,现在有一个非空数组,除了某个元素会出现一次之外,其他元素都会出现两次,比如数组 [4,1,2,1,2] 那程序运行结果就是 4 。在你实现的时候呢,有个要求,就是不准使用额外空间,就把这个需求给实现。

小兰:嗯,既然是检验我是否掌握了异或位运算,那应该就是用它来实现了。

小兰:哈,小哥哥,我实现出来咯,你看,我是这么写的代码:

public static int singleNumber(int[] nums){        int complete = 0;        // 循环数组中的值        for (int num : nums){        // 当 complete 和 num 异或之后等于 num 本身时,说明这个数出现了一次            complete ^= num;        }        return complete;}

阿粉:哎呦,这波操作可真是亮瞎了我的眼

小兰:哈哈,以前只是学理论,没想到在编程中应用是这么好玩。我再去学习一下其他的逻辑运算符

阿粉:嗯,小姑娘很棒哈,知道自己这里是薄弱之处,就会把相同的知识点一起学习一下,这样的学习效率很高,给你点赞。

小兰:如果我在学习过程中,遇到不会的,可以继续请教小哥哥嘛?到时候不要嫌弃我。

阿粉:怎么会嫌弃呢,乐意之至。只要你遇到问题,随时来找我。(暖男要暖到底不是)

小兰:我就先谢过小哥哥啦,大早上的就让我学到了新知识。该去工作了,小哥哥回来聊啊~

阿粉:回来聊,回来聊~

妹子都学会了的异或运算,各位看官学会了嘛?学会的点个赞,让我看到你。



写在最后


最后(知识星球现在续费只要 6 折)


现在阿粉诚邀你加入我们的知识星球,这里有 1700+ 优秀的人与你一起进步,如果你是小白那你是稳赚了,很多业内经验和干货分享给你;如果你是大佬,那可以进来我们一起交流分享你的经验,说不定日后我们还可以有合作,给你的人生多一个可能。


最后为了感谢球友们的在星球中付出,星球有了你们,才会这么精彩。现在特为老球友开启限时优惠,老球友续费 只要 6 折!


长按识别下方二维码,和1700位球友一起进步
雷军说:试错的成本很低,错过的成本很高!




往期 精彩 回顾




面试必问的 MySQL 知识点,你还有哪些没准备好,赶紧收藏脑图!
听说 Python 生成二维码很简单,说的好像我Java 很复杂一样。
网传字节跳动 TNS 部门一锅端,转岗“难于上青天”









请到「今天看啥」查看全文