`
zhouyrt
  • 浏览: 1125742 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一道经典面试题想到的

阅读更多

不使用第三个变量完成两个整数的交换,这个面试题大概大家都碰到过。如下是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

 

 

 

分享到:
评论
35 楼 smzd 2010-05-20  
[]的引入不算变量?没有名字的变量而已!{}也是一样的
34 楼 l8653668 2010-05-15  
jakend 写道
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

此方法,针对java 可以,针对c++ 就不行,java引用了第三方变量。


各位大牛可以解释一下么?还是看不懂...
33 楼 jakend 2010-04-28  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

此方法,针对java 可以,针对c++ 就不行,java引用了第三方变量。

32 楼 zhengtianbing123 2010-04-21  
satanest 写道
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个方法厉害

这个真的很巧妙!
31 楼 jslfl 2010-04-21  
hiblue 写道
x = y+0*(y=x);
这个实际上是有隐含变量的.

运算顺序的技巧而已,没用到啥隐含变量吧,,
30 楼 zhaolaiwei 2010-04-21  
hiqrf 写道
lbfhappy 写道
hiblue 写道
x = y+0*(y=x);
这个实际上是有隐含变量的.

你指的隐含变量是哪个?

用来保存0*(y=x)的值,你研究一下编译原理就明白了。

想明白这个表达式的系统编译执行过程?有哪位高人请指点?
29 楼 yangpeihai 2010-04-20  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

写得好,学习一下
28 楼 jimmy9495 2010-04-20  
lichong_87 写道
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过



这个是怎么实现的啊?……Java可以但是在C++下面执行结果不对啊,没有交换啊……


虽然结果是跑出来了,但是对于实现原理是怎样的还不是很清晰,有知道的大虾解释下吧!
27 楼 lichong_87 2010-04-20  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过



这个是怎么实现的啊?……Java可以但是在C++下面执行结果不对啊,没有交换啊……
26 楼 bingufo 2010-04-20  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过


哈哈,果然很简单,我编译通过了.佩服
25 楼 goon 2010-04-19  
上学时的练习题。。。
24 楼 anywhere 2010-04-19  
如果是企业开发,这样的面试题目没有水准了,
现在算法已是次要的了,
精力应用在业务逻辑实现上,
已经有相当的算法在网上可以找到,
很多也是open source的,
就连google的搜索算法都是。
23 楼 sunzeshan 2010-04-19  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

头回见,很赞
22 楼 zhao103804 2010-04-19  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过



这个方法不错
21 楼 zhouyrt 2010-04-19  
lifesinger 写道
js 1.6:

var x = 1, y = 2;
[x,y] = [y, x];

这样就可以了。目前 firefox 支持。


谢谢玉伯,学习了!JS从perl,python身上学到了不少,可惜其它浏览器(甚至Chrome)都没有支持。希望这些能写入EMCA262 V6中。

纠正下:应该是js 1.7,https://developer.mozilla.org/cn/New_in_JavaScript_1.7


20 楼 zhouyrt 2010-04-19  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过


学习了,谢谢!
19 楼 20055294 2010-04-19  
学习了,收藏了
18 楼 liwanfeng 2010-04-18  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个我还真是第一次看过!牛!
17 楼 lixinlixin2008 2010-04-18  
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过


这个赞
16 楼 askyuan 2010-04-18  
呵呵
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过
这个好

相关推荐

    嵌入式经典面试题嵌入式经典面试题

    嵌入式经典面试题嵌入式经典面试题嵌入式经典面试题嵌入式经典面试题嵌入式经典面试题

    10万字208道Java经典面试题总结(附答案).pdf

    10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附答案).pdf 10万字208道Java经典面试题总结(附...

    Python经典面试题-总结

    Python经典面试题 Python经典面试题 python面试题 python 面试题 Python经典面试题 Python经典面试题 python面试题 python 面试题 Python经典面试题 Python经典面试题 python面试题 python 面试题 Python经典面试题 ...

    C ++经典面试题,C ++经典面试题

    C ++经典面试题C ++经典面试题C ++经典面试题C ++经典面试题C ++经典面试题C ++经典面试题C ++经典面试题

    PHP经典面试题

    PHP经典面试题 PHP经典面试题 PHP经典面试题 PHP经典面试题 PHP经典面试题

    SQL经典面试题及答案SQL经典面试题及答案

    SQL经典面试题及答案 SQL经典面试题及答案

    java经典面试题

    面试时整理的资料,大家可以看看,面试的java题目,面试时整理的资料,大家可以看看,面试的java题目

    vue经典面试题及答案.rar

    vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典面试题及答案.rar vue经典...

    2022年SQL数据库经典面试题笔试题 (2).pdf

    2022年SQL数据库经典面试题笔试题 (2).pdf2022年SQL数据库经典面试题笔试题 (2).pdf2022年SQL数据库经典面试题笔试题 (2).pdf2022年SQL数据库经典面试题笔试题 (2).pdf2022年SQL数据库经典面试题笔试题 (2).pdf2022...

    java经典面试题(典藏版)

    java经典面试题(典藏版)java经典面试题(典藏版)java经典面试题(典藏版)java经典面试题(典藏版)java经典面试题(典藏版)

    cobol面试题 经典面试题

    cobol面试题 cobol面试题 cobol面试题

    各公司经典面试题选取

    各公司经典面试题选取

    Spring经典面试题

    Spring经典面试题Spring经典面试题Spring经典面试题Spring经典面试题

    c语言经典面试题

    c语音经典面试题,来自培训机构内部面试题库。

    sqlserver 经典面试题

    sqlserver 经典面试题。详细说明面试重点,值得参考

    IT行业经典面试题,121套面试题

    IT行业经典面试题,121套面试题 IT行业经典面试题,121套面试题 IT行业经典面试题,121套面试题 IT行业经典面试题,121套面试题

    sql经典面试题

    sql经典面试题 mysql 很好的面试题 sql经典面试题 mysql 很好的面试题 sql经典面试题 mysql 很好的面试题 sql经典面试题 mysql 很好的面试题 sql经典面试题 mysql 很好的面试题 sql经典面试题 mysql 很好的面试题 ...

    50+Vue经典面试题详解,你值得收藏

    50+Vue经典面试题详解,你值得收藏.50+Vue经典面试题详解,你值得收藏.50+Vue经典面试题详解,你值得收藏.50+Vue经典面试题详解,你值得收藏.50+Vue经典面试题详解,你值得收藏.50+Vue经典面试题详解,你值得收藏.50...

    C++经典面试题C++经典面试题

    C++经典面试题 C++经典面试题 C++经典面试题 C++经典面试题 C++经典面试题

    java绝对经典面试题

    绝对经典的java面试题,从各个公司面试收集的java面试题,几乎包含所有的java知识。

Global site tag (gtag.js) - Google Analytics