不使用第三个变量实现元素之间的交换
来源:互联网 发布:韩路淘宝店叫什么 编辑:程序博客网 时间:2024/05/13 09:22
解决这类的问题的关键的在于:运算可逆,逻辑可逆
只要有+就可以用-返回去
有*就可以用/返回去
用^可以用^返回去
还有一个巧妙的方法将三步操作合为一步
我这里用java写,用c的自己加*
第一种
void change(int a,int b){
a=a*b;
b=a/b;
a=a/b;
}
该方法中我们用乘法新产生一个值,用除法将值还原回去
缺点:用乘法使元素变大,类型内存溢出
第二种
void change(int a,int b){
a=a+b;
b=a-b;
a=a-b;
}
该方法中我们用加法新产生一个值,用减法将值还原回去
缺点:降低了乘法内存溢出的可能,但是还会有内存溢出的可能
第三种
void change(int a,int b){
a=a^b;
b=a^b;
a=a^b;
}
使用逻辑上的异或操作,很好的避免了内存问题。
下面两种方法中,为了不使用第三方变量,我们将三步操作合为一步
于是就不需要第三方变量了
第四种
void change(int a,int b){
a=a+b-(b=a);
}
第五种
void change(int a,int b){
a=b+0*(b=a);
}
我见到还有使用堆栈的,只为实现交换元素用堆栈是不是有点杀鸡用牛刀的感觉
0 0
- 不使用第三个变量实现元素之间的交换
- 不使用第三个变量实现两个整数之间的交换
- 不借助第三个变量实现两个变量之间的值传递和交换
- 不借助第三个变量实现两个变量之间的值传递和交换
- 不借助第三个变量实现两个变量的交换
- 交换两个变量的值不使用第三个变量
- 交换两个变量的值,不使用第三个变量
- 不使用第三个变量,交换两个变量的值!
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值,不使用第三个变量
- 不使用第三个变量 交换两个变量的值
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值,不使用第三个变量
- 交换两个变量的值 不使用第三个变量
- 交换两个变量的值,不使用第三个变量
- 不使用第三个变量交换两个变量的值
- 交换两个变量的值,不使用第三个变量
- unity3d学习之Rotate和RotateAround做地球绕太阳旋转
- 动态规划——钢管问题(算法导论经典问题)
- 触摸事件的分析与总结----TouchEvent处理机制
- array_walk与array_map 的不同
- java多线程中的volatile
- 不使用第三个变量实现元素之间的交换
- 第十四周项目一:折腾二维数组
- 设计模式【外观模式】
- MD5加密解密类 winform
- CentOS6.5 下SSH密钥登录详解
- 随机生成一些数字并传入某个方法,每当接收到新数字的时候,找出并记录中位数
- iOS中生成随机数arc4random
- VMware中bridged、NAT和host-only
- C语言读取BMP图像到数组,BMP图片格式