博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
"Coding Interview Guide" -- 不用额外变量交换两个整数的值
阅读量:5219 次
发布时间:2019-06-14

本文共 625 字,大约阅读时间需要 2 分钟。

题目

  如何不用任何额外变量交换两个整数的值

 

分析

  关于异或运算有三点性质:

  1、异或运算满足交换律和结合律;

  2、一个数与自己异或的结果为0,即a ^ a = 0;

  3、一个数与0异或的结果是它自己本身,即a ^ 0 = a;

  4、一个数与1异或的结果是对该数取反,即a ^ 1 = ~a;

 

1 public static void swapWithoutTemp(int[] a, int[] b)2 {3     a[0] = a[0] ^ b[0];4     b[0] = a[0] ^ b[0];   // 此时a == a ^ b; b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a;5     a[0] = a[0] ^ b[0];   // 此时b == a; a = a ^ b = (a ^ b) ^ a = (a ^ a) ^ b = b;6 }

 

   Java中是值传递,所以无法通过将两个整型值传递给交换函数实现交换它们的值,但是可以将该基本数据类型的值用一个同类型且只包含一个元素的数组包装起来,可达到同样的效果。以本题为例,int[] a = new int[1]; int[] b = new int[1];

 

来源:左程云老师《程序员代码面试指南》

  

转载于:https://www.cnblogs.com/latup/p/10872478.html

你可能感兴趣的文章
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>
Linux升级内核教程(CentOS7)
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>
类别的三个作用
查看>>
【SICP练习】85 练习2.57
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
Maximum Product Subarray
查看>>
solr相关配置翻译
查看>>
通过beego快速创建一个Restful风格API项目及API文档自动化(转)
查看>>
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
Hibernate中inverse="true"的理解
查看>>