[CareerCup] 17.1 Swap Number In Place 互换位置
2016-04-18 00:39
465 查看
17.1 Write a function to swap a number in place (that is, without temporary variables).
这道题让我们交换两个数,但是不能用额外空间,那么我们可以先做差值,存入a中,然后再加上b,存入b中,那么此时的b即为原来的a,因为整个相当于做了一个a - b + b的过程,那么现在b是原来的a,而a中现在保存的是差值,,那么原来的b值就可以通过b-a来得到,保存到a中即可:
解法一:
下面这种做法跟上面的方法思路相同,但是用到了异或操作符,a异或b求的实际上就是a与b的差值,然后结果再异或b得到a,这就相当于a^b^b,即a^(b^b),由于b^b为0,任何数异或0都为其本身,所以b就成了a,然后a再异或差值就得到了b,完成了交换:
解法二:
CareerCup All in One 题目汇总
这道题让我们交换两个数,但是不能用额外空间,那么我们可以先做差值,存入a中,然后再加上b,存入b中,那么此时的b即为原来的a,因为整个相当于做了一个a - b + b的过程,那么现在b是原来的a,而a中现在保存的是差值,,那么原来的b值就可以通过b-a来得到,保存到a中即可:
解法一:
void swap(int a, int b) { a = a - b; b = b + a; a = b - a; cout << a << " " << b << endl; }
下面这种做法跟上面的方法思路相同,但是用到了异或操作符,a异或b求的实际上就是a与b的差值,然后结果再异或b得到a,这就相当于a^b^b,即a^(b^b),由于b^b为0,任何数异或0都为其本身,所以b就成了a,然后a再异或差值就得到了b,完成了交换:
解法二:
void swap(int a, int b) { a = a ^ b; b = a ^ b; a = a ^ b; cout << a << " " << b << endl; }
CareerCup All in One 题目汇总
相关文章推荐
- valgrind的使用
- 全面解读WM_NOTIFY
- 有价值第三方库
- CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别
- Python 练习实例37
- iOS9 http与https
- WM_DRAWITEM与DrawItem()的讨论(自绘)
- 团队作业(二)
- Android学习笔记
- leetcode 27. Remove Element-数组去重|双指针
- Custom draw 和 Owner draw 的区别
- MyBatis缓存
- CocoaPods 介绍
- 第七届科技节图像后期处理大赛须知
- NM_CUSTOMDRAW 消息
- Anroid Studio第七期 - 语音动画
- Anroid Studio第七期 - 语音动画
- CAEmitterLayers
- js中继承的几种用法总结(apply,call,prototype)
- 进程—初印象