(这首歌挺喜欢的...分享出来)

今天是小浩算法“365刷题计划”第65天。这两天总有人来问我,做公众号赚了多少钱,或者就是怎么能和你一样,2个月就做到7000粉丝。说实话,至少到目前为止,我一分钱都没赚(打赏的百十块也都红包发出去了),以后赚不赚不好说,毕竟人要吃喝,我也不例外。但是至少目前我认为还没准备好,也不是没有广告商来找,我都委婉拒掉了。另外细心的读者会发现,我连文末的广告都没有开。另外,关于粉丝的增长,我觉得就是单纯的创作,坚持写好文章而已。可能和别的博主不一样,他们有的内容和运营的时间比,在5:5,我大概只有9:1,毕竟我还得上班。而且我不太会弄一些浮夸的标题(太笨编不来),也不会引流,那就只能每天把一个题解写对再写好,争取大家能看懂。不会写得太长,让你们觉得枯燥,不会写的特别短,让你们厌烦。这就是目前我所有能做的想做的了,其他的,以后再说。好了,废话就到这里,今天将分享一道很简单,并且总被Diss的题目:

01

PART

两数之和

这个题很老了,拿出来给不会的同学看一看,会的直接跳过。(值得一说的是,这个题目在国外上,有2000个dislike,可以看到大家的嫌弃!)

第268题:不使用运算符 + 和 - ,计算两整数 a 、b 之和。

(有人强烈建议换一个...)

02

PART

位运算求解

位运算的题,大部分都有一些特别的技巧,只要能掌握这些技巧,对其拼装组合,就可以破解一道道的题目。很多人说那些技巧想不到,我觉得是因为没有认真的去学习和记忆。你要相信,基本上所有人最开始都是不会的,只是后来他们通过努力学会了记住了,而你因为没努力一直停留在不会而已。不要觉得那些一眼看到题就能想到解法的人有多么了不起。“无他,唯手熟尔!”

下面这两个技巧大家需要记住,这也是讲解本题的目的:

“异或”是一个无进位加法,说白了就是把进位砍掉。比如01^01=00。

“与”可以用来获取进位,比如01&01=01,然后再把结果左移一位,就可以获取进位结果。

根据上面两个技巧,假设有 12+7:

根据分析,完成题解:

 1//JAVA2class Solution {3    public int getSum(int a, int b){4        while(b != 0){5            int temp = a ^ b;6            b = (a & b) << 1;7            a = temp;8        }9        return a;
10    }
11}
  • 本系列所有教程都不会用到复杂的语言特性,不需要担心没有学过相关语法,使用各语言纯属本人爱好。

  • 作为学术文章,虽然风格可以风趣,但严谨,我是认真的。本文所有代码均在leetcode上进行过测试运行。

  • 算法思想才是最重要的。

03

PART

位运算技巧总结

为了大家方便学习,我对位运算的常见面试题技巧进行了总结。

首先,常见的位运算包括:

Operators Meaning of operators
& Bitwise AND,按位与
| Bitwise OR,按位或
^ Bitwise XOR,按位异或
~ Bitwise complement,按位取反
<< Shift left,左移
>> Shift right,右移

基本的操作我就直接略过了。下面是我认为必须掌握的技巧:(注意,我把一些生僻的技巧都已经砍掉了,留下来的,就是我认为应该会的)

1、使用 x & 1 == 1 判断奇偶数。(注意,一些编辑器底层会把用%判断奇偶数的代码,自动优化成位运算)

2、不使用第三个数,交换两个数。x = x ^ y , y = x ^ y , x = x ^ y。(早些年喜欢问到,现在如果谁再问,大家会觉得很low)

3、两个相同的数异或的结果是 0,一个数和 0 异或的结果是它本身。(对于找数这块,异或往往有一些别样的用处。)

4、x & (x - 1) ,可以将最右边的 1 设置为 0。(这个技巧可以用来检测 2的幂,或者检测一个整数二进制中 1 的个数,又或者别人问你一个数变成另一个数其中改变了多少个bit位,统统都是它)

5、i+(~i)=-1,i 取反再与 i 相加,相当于把所有二进制位设为1,其十进制结果为-1。

6、对于int32而言,使用 n >> 31取得 n 的正负号。并且可以通过 (n ^ (n >> 31)) - (n >> 31) 来得到绝对值。(n为正,n >> 31 的所有位等于0。若n为负数,n >> 31 的所有位等于1,其值等于-1)

7、使用 (x ^ y) >= 0 来判断符号是否相同。(如果两个数都是正数,则二进制的第一位均为0,x^y=0;如果两个数都是负数,则二进制的第一位均为1;x^y=0 如果两个数符号相反,则二进制的第一位相反,x^y=1。有0的情况例外,^相同得0,不同得1)

第一版先整理这些吧,后续再逐步补充。想复习一下其他位运算题目的,可以看:

漫画:位运算系列篇(缺失数字)

漫画:位运算系列篇(只出现一次的数字)

漫画:位运算系列篇(只出现一次的数字 - 进阶版)

漫画:三分钟学习一道位运算的面试题,万一遇到了呢?

漫画:位运算技巧助你俘获offer

所以,今天的问题你学会了吗?评论区留下你的想法!

 小浩算法,每日

关注领取《图解算法》高清版

进群的小伙伴请加右侧私人微信(备注:进群)

漫画:位运算技巧整理汇总+一道被嫌弃的题目相关推荐

  1. 漫画:位运算技巧助你俘获offer

    今天是小浩算法"365刷题计划"第61天.继续分享一道和位运算有关的题型,同样在难度上属于简单.建议先看一下昨天的题目,因为同样的技巧,也可以使用在本题中. 漫画:三分钟学习一道位 ...

  2. python写整数逆位运算_简单了解python的一些位运算技巧

    前言 位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中 ...

  3. 使用位运算技巧比较两个数中较大的数

    使用位运算技巧比较两个数中较大的数 作者:Grey 原文地址: 博客园:使用位运算技巧比较两个数中较大的数 CSDN:使用位运算技巧比较两个数中较大的数 题目要求 如何不要用任何比较判断符(>, ...

  4. 你可能不知道的位运算技巧

    作者 | bigsai  责编 | 张文 头图 | CSDN 下载自视觉中国 位运算隐藏在编程语言的角落中,其神秘而又强大,暗藏内力,有些人光听位运算的大名的心中忐忑,还有些人更是一看到位运算就远远离 ...

  5. 《位运算技巧以及Leetcode的一些位运算题目》

    目录 技巧 练习位运算 [461. 汉明距离](https://leetcode-cn.com/problems/hamming-distance/) [190. 颠倒二进制位](https://le ...

  6. NKU两题简单题解析(递归分析与位运算技巧)

    题目:http://acm.nankai.edu.cn/p1002.html 题意:对给定的f(n),当 n>=50025002 的时候,f(n)=n-5:当 n<50025002 的时候 ...

  7. 【总结】SQL性能优化技巧整理汇总

    背景 一开始会用SQL时,无非都是照着 [select from where group by order by] 这个格式套来套去:从来不会关注 SQL 的耗费时长,更不会关注查询的性能.但是,当用 ...

  8. 漫画:三分钟学习一道位运算的面试题,万一遇到了呢?

    今天是小浩算法"365刷题计划"第60天.分享一道比较简单但是很经典的题目.话不多说,直接看题. 01 PART 2的幂 这道题,大家先想一想是用什么思路进行求解? 第231题:给 ...

  9. 位运算简介及实用技巧(一):基础篇

    去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章.后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法.从今天起我 ...

最新文章

  1. Redis Info详解
  2. JS设置每日定时任务
  3. 转:Android中如何修改系统时间(应用程序获得系统权限)
  4. 一个小老板从小公司创业开始做起的过程记录
  5. mysql 5.7 远程端口_ubuntu 16.04 mysql5.7.17 开放远程3306端口
  6. 【月入百万】,资深股民恐怕都不知道
  7. 基于php程序系统设计,PHP程序静态分析系统的设计与实现
  8. idea通过数据库生成实体类插件_idea数据库生成实体类
  9. 盘点一款Python发包收包利器——scapy
  10. Matlab运行.m文件
  11. 网络管理-Pageadmin CMS构建企业网站的方法
  12. Canvas绘制飞机飞行
  13. 人体究竟需要多少蛋白质?摄入过量就是浪费钱
  14. 移动端可以查看的设计APP,推荐给大家
  15. mysql文档顶层出现无效内容_文档的顶层无效。处理资源问题,人家网站可以,我的不行!...
  16. 【科普】视频剪辑中的关键帧是什么?
  17. windows7系统Prolific USB-to-Serial Comm Port问题
  18. 正则表达式(匹配第一个花括号)
  19. iGrimace1.44基本使用方式
  20. CSDN付费专栏写作协议

热门文章

  1. CTF比赛PWN题sgtlibc通用快速解题框架
  2. python api文档生成二维码_使用Python第三方库生成二维码
  3. JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,respon 区别
  4. kindle上查看微信读书的书籍
  5. 【概率论】贝叶斯法则
  6. 微服务拆分策略和原则
  7. window、linux、mac 文件路径禁止字符, 路径长度【全网总结】
  8. 联想G40重装linux系统,联想g40-30如何重装系统_联想g40-30重装win7系统的图文教程-win7之家...
  9. MyBatis_查询缓存01
  10. 算法竞赛入门经典 习题3-2 分子量 Molar Mass