落单的数
来源:互联网 发布:软件开发公司上市资质 编辑:程序博客网 时间:2024/06/05 15:31
题目链接:落单的数
这个题用到了“异或”运算符"^"下面是异或异或运算符的用法:
(1)使特定位翻转
设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算,
即:
01111010
^00001111
01110101
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1
即可。
(2)与0相“异或”,保留原值
例如:012^00=012
00001010
^00000000
00001010
因为原数中的1与0进行异或运算得1,0^0得0,故保留原数。
(3) 交换两个值,不用临时变量
例如:a=3,即11(2);b=4,即100(2)。
想将a和b的值互换,可以用以下赋值语句实现:
a=a∧b;
b=b∧a;
a=a∧b;
a=011(2)
(∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
(∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
(∧)a=111(2)
a=100(2)(a∧b的结果,a已变成4)
等效于以下两步:
① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。
② 再执行第三个赋值语句: a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),
因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b.
代码:
int a=A.size();
if(a==0) return 0;//空数组
else {int i;
int m=A[0];
for(i=1;i<a;i++)
{ m=m^A[i];}
return m;}
其中主要是 { m=m^A[i];}这一句代码:
这一句代码运用了异或运算,其他数都有另一半,都可以异或运算成0,唯独那个落单的数,最后剩下0和那个异或的数,然后这两个数进行异或运算,结果是落单数。
- 落单的数
- LinCode落单的数
- 落单的数
- 题目:落单的数
- 落单的数 III
- 落单的数 II
- 落单的数
- 落单的数
- LinCode落单的数
- LintCode_82_落单的数
- lintcode ----落单的数
- LintCode 落单的数
- 落单的数
- 落单的数II
- 落单的数 III
- 落单的数
- 落单的数 II
- 落单的数 III
- 3DES实现加密算法
- 堆排序
- 牛客网--统计字符
- 链表面试题Java实现【重要】
- 栈和队列的面试题Java实现
- 落单的数
- 2017.10 最新版tensorflow for windows安装过程记录
- 10分钟上手图数据库Neo4j
- 关于外链js中文乱码问题
- 数据结构时间复杂度
- 项目中添加 android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"应用崩溃
- CentOS7下引导Win7修改Win7为默认引导方法
- 201710042130->事件派发eventdispatch
- netty学习demo01