锁定老帖子 主题:一道经典面试题想到的
精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-16
最后修改:2010-04-19
不使用第三个变量完成两个整数的交换,这个面试题大概大家都碰到过。如下是java中的代码:
public class Person { public static void main(String[] args) { //利用加减法 int a = 10, b = 5; a = a + b; b = a - b; a = a - b; System.out.println("a=" + a + "\nb=" + b); } }
还有另外一种方法,且效率更快:
public class Person { public static void main(String[] args) { //利用一个数异或本身等于0和异或运算符合交换率 int a = 10, b = 5; a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a=" + a + "\nb=" + b); } }
当然以上两种的算法对应js中也支持,如下:
var a = 11,b = 22; a = a + b; b = a - b; a = a - b; console.log(a+'\n'+b) 或 var a = 11,b = 22; a = a ^ b; b = a ^ b; a = a ^ b; console.log(a+'\n'+b)
但如果两个变量是对象类型,java(强类型)貌似无能为力了。js却可以,实现方式还不少,如下:
var a = {name:'jack'},b = {name:'tom'}; a = [a,b]; b = a[0]; a = a[1]; console.log(a.name+'\n'+b.name)
或者
var a = {name:'jack'},b = {name:'tom'}; a = {a:a,b:b}; b = a.a; a = a.b; console.log(a.name+'\n'+b.name)
正是利用js动态类型(弱类型)系统及对象/数组直接量特性。其它强类型则不可以,编译器会提示类型转换错误。
资源:http://en.wikipedia.org/wiki/XOR_swap
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-17
第一种方式
a = Integer.MAX_VALUE; b = 1; 咋整 ![]() |
|
返回顶楼 | |
发表时间:2010-04-17
Zahir 写道 第一种方式
a = Integer.MAX_VALUE; b = 1; 咋整 ![]() 一样可以用 |
|
返回顶楼 | |
发表时间:2010-04-17
int x = 10;
int y = 20; x = y+0*(y=x); 这个方法比较好,我以前有看到过 |
|
返回顶楼 | |
发表时间:2010-04-17
phenix9527 写道 int x = 10;
int y = 20; x = y+0*(y=x); 这个方法比较好,我以前有看到过 这个方法厉害 |
|
返回顶楼 | |
发表时间:2010-04-17
这也叫经典阿?
大概您没面试过吧? |
|
返回顶楼 | |
发表时间:2010-04-17
phenix9527 写道 int x = 10;
int y = 20; x = y+0*(y=x); 这个方法比较好,我以前有看到过 确实,这个不错 |
|
返回顶楼 | |
发表时间:2010-04-17
js 1.6:
var x = 1, y = 2; [x,y] = [y, x]; 这样就可以了。目前 firefox 支持。 |
|
返回顶楼 | |
发表时间:2010-04-17
phenix9527 写道 int x = 10;
int y = 20; x = y+0*(y=x); 这个方法比较好,我以前有看到过 这个太赞了 |
|
返回顶楼 | |
发表时间:2010-04-17
最多算笔试题。
目前对于企业应用,算法并不重要。 |
|
返回顶楼 | |