如何不引入第三个中间变量进行两数交换

但在大厂面试中,有一道非常经典的数字交换题目:如何在不引入第三个中间变量的情况下,完成两个数字的交换。

这里可以用到一个数学上的技巧:

java 复制代码
a = a + b;
b = a - b;
a = a - b;

除了这种先加后减的写法,还有一种先减后加的写法:

java 复制代码
a = b - a;
b = b - a;
a = a + b;

但这两种方式都可能导致数字越界。

更好的方案是通过位运算完成数字交换:

java 复制代码
a = a ^ b;
b = b ^ a;
a = a ^ b;
相关推荐
forestsea12 小时前
现代 JavaScript 加密技术详解:Web Crypto API 与常见算法实践
前端·javascript·算法
张洪权12 小时前
bcrypt 加密
算法
快手技术12 小时前
视频理解霸榜!快手 Keye-VL 旗舰模型重磅开源,多模态视频感知领头羊
算法
骑自行车的码农13 小时前
🍂 React DOM树的构建原理和算法
javascript·算法·react.js
CoderYanger14 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
希望有朝一日能如愿以偿14 小时前
力扣每日一题:能被k整除的最小整数
数据结构·算法·leetcode
Controller-Inversion14 小时前
力扣53最大字数组和
算法·leetcode·职场和发展
rit843249914 小时前
基于感知节点误差的TDOA定位算法
算法
m0_3722570214 小时前
ID3 算法为什么可以用来优化决策树
算法·决策树·机器学习
q***252114 小时前
SpringMVC 请求参数接收
前端·javascript·算法