![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
拒绝内卷007
大龄码农
展开
-
LeetCode之Hamming Distance
看到异或运算的那一刹那我就傻眼了——有这么好用的办法为啥我就没想到呢?异或运算之后,我们只要数一数结果里面有多少个1就行了,因为只有两个数相同位的值不同结果才是1,这就是核心思路。然后就是如何去数结果里面1的个数,上述答案使用了32次循环,每次循环内比较xor的一个位和1的与运算,如下:1011 1001 11010000 0000 0001因为1之前的位全是0,所以和xor对应位的与运算结果必是0;这样xor和1的与运算结果其实是xor的最后一位和1的与运算结果,这办法聪明!原创 2017-03-06 16:15:29 · 1438 阅读 · 0 评论 -
LeetCode之Number Complement
题设的要求就是把一个正数的各个二进制位取反,取反的意思就是0变1,1变0,比如101变成010,可以看出,取反之后与原数相加就是111。所以解题思路也很简单,就是找出这个和,减去原数就行了。问题在于如何找到这个和?因为不同的输入,对应的和的二进制中1的个数是不同的。然而可以确定的是,这个和的二进制位数和原数是一致的。所以只要求得原数的位数,就可以算出这个和。原创 2017-03-13 11:19:10 · 269 阅读 · 0 评论 -
leetCode之Two Sum
本质上就是在第一次遍历的同时,把相关信息保存到其他地方,这里就是放到一个map里面。在原数组中key是数组下标,value是元素值;放到map中恰好反了过来,key成了元素值,而value是数组下标。遍历过的元素都被当成key存到map里,而对应的value就是它的下标。所以从第二个元素开始,只需要看看它和map中某个key的和是否为target就行,不行就把它存到map中,继续遍历。讲道理,这个方法,巧是巧,就是有点钻空子了。首先一点,我个人觉得在这种算法题中,最好不要使用Java的API,因为这原创 2017-03-16 14:51:54 · 263 阅读 · 0 评论 -
关于快速排序的深入分析
快排几乎是每次面试必考的问题,实际中应用也很广泛,但是我发现自己看完之后,当时觉得理解了,但是过段时间就忘了。。所以下面就对它进行一次深刻细致的分析,能够随时想起来,至少把它的思路印在脑子里。虽然快排的最坏情况时间复杂度为Ө(n^2);但期望时间复杂度为Ө(nlgn),且隐含的常数因子非常小;快排的另一大优势在于它可以原址排序,这意味着空间复杂度是Ө(1)。原创 2015-09-12 19:24:41 · 495 阅读 · 0 评论