`
zhouyrt
  • 浏览: 1174490 次
  • 性别: 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

 

 

 

分享到:
评论
15 楼 hiqrf 2010-04-18  
lbfhappy 写道
hiblue 写道
x = y+0*(y=x);
这个实际上是有隐含变量的.

你指的隐含变量是哪个?

用来保存0*(y=x)的值,你研究一下编译原理就明白了。
14 楼 lbfhappy 2010-04-18  
<div class="quote_title"><br></div>
<div class="quote_div">
 
<p>但如果两个变量是对象类型,java(强类型)貌似无能为力了。js却可以,实现方式还不少,如下:</p>
<p> </p>
<pre name="code" class="js">var a = {name:'jack'},b = {name:'tom'};
a = [a,b];
b = a[0];
a = a[1];

console.log(a.name+'\n'+b.name)</pre>
 
<p> </p>
<p> </p>
<p> </p>
</div>
<p>如果是这样的话,JAVA也可以啊。</p>
<p> </p>
<pre name="code" class="java">        Object x = 10;
        Object y = 20;
        x = new Object[]{x, y};
        y = ((Object[]) x)[0];
        x = ((Object[]) x)[1];
        System.out.println("x=" + x + ",y=" + y);</pre>
13 楼 lbfhappy 2010-04-18  
hiblue 写道
x = y+0*(y=x);
这个实际上是有隐含变量的.

你指的隐含变量是哪个?
12 楼 hiblue 2010-04-17  
x = y+0*(y=x);
这个实际上是有隐含变量的.
11 楼 naily 2010-04-17  
hiqrf 写道
i2534 写道
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个太赞了

这个 低层 用了中间变量




算违背题意吗
10 楼 hiqrf 2010-04-17  
i2534 写道
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个太赞了

这个 低层 用了中间变量
9 楼 三问飞絮 2010-04-17  
最多算笔试题。
目前对于企业应用,算法并不重要。
8 楼 i2534 2010-04-17  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个太赞了
7 楼 lifesinger 2010-04-17  
js 1.6:

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

这样就可以了。目前 firefox 支持。
6 楼 luffyke 2010-04-17  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

确实,这个不错
5 楼 ronartest 2010-04-17  
这也叫经典阿?
  大概您没面试过吧?
4 楼 satanest 2010-04-17  
phenix9527 写道
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过

这个方法厉害
3 楼 phenix9527 2010-04-17  
int x = 10;
int y = 20;
x = y+0*(y=x);
这个方法比较好,我以前有看到过
2 楼 lyw985 2010-04-17  
Zahir 写道
第一种方式
a = Integer.MAX_VALUE;
b = 1;
咋整


一样可以用
1 楼 Zahir 2010-04-17  
第一种方式
a = Integer.MAX_VALUE;
b = 1;
咋整

相关推荐

    Python经典面试题-总结

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

    java工程师社招经典面试题

    java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java工程师社招经典面试题java...

    java经典面试题

    ### Java经典面试题知识点 #### Java数据结构容器 - **核心知识点**:Java集合框架,包括List、Set、Map等接口及其实现类。List接口代表有序的集合,例如ArrayList和LinkedList;Set接口代表不允许重复元素的集合,...

    120个Java经典面试题和答案

    Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案Java经典面试题和答案...

    vue经典面试题及答案.rar

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

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

    下面,我们就来详细探讨一下C++经典面试题所涵盖的知识点。 首先,C++的基础部分通常包括以下几个方面: 1. **变量与数据类型**:理解不同类型的变量(如int, float, double, char等)以及它们的存储需求和运算...

    嵌入式经典面试题.txt

    嵌入式经典面试题.txt

    java开发环境+mysql经典面试题+mysql概念学习

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发...

    UC经典面试题——linux c

    UC面试题,里面包含uc经典面试题,是准备找uc工作的人的首选。

    java经典面试题java经典面试题.doc

    java经典面试题java经典面试题

    vue20道经典面试题,由初级到中高级

    Vue经典面试题汇总 本文总结了 Vue 中的经典面试题,涵盖了 Vue 生命周期、Vue Router 导航钩子、SCSS/LESS 预编译、Vuex 状态管理、导航钩子、组件传值、父子组件调用方法等多方面的知识点。 1. Vue 生命周期 在...

    前端75道经典面试题.rar

    "前端75道经典面试题.rar"这个压缩包提供了互联网大厂常问的75道前端面试题,覆盖了基础到进阶的多个层面,是提升你面试能力的理想资料。以下是一些可能包含在这些面试题中的关键知识点: 1. **HTML与CSS**: - ...

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习

    java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发环境+mysql经典面试题+mysql概念学习 java开发环境+大数据开发...

    阿里面试题 腾讯面试题 百度面试题 华为面试题 京东面试题 头条面试题 经典面试题 程序员 IT经理 项目经理 面试题

    阿里面试20题 百度面试10题 华为面试10题 京东面试13题 腾讯面试37题 头条面试10题 项目经理面试常遇问题 经典面试题 程序员 IT经理 项目经理 面试题 研发经理 高级程序员 经典面试题

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

    SQL经典面试题及答案 从给定的文件信息中,我们可以总结出四个重要的SQL知识点: 一、使用GROUP BY语句来统计分类结果 在给定的部分内容中,我们可以看到一个经典的SQL面试题,即如何使用GROUP BY语句来统计分类...

    c 经典面试题经典版

    《C语言经典面试题解析》 面试是评估潜在员工技能的重要环节,对于C/C++程序员而言,面试中常出现的经典问题往往围绕基础概念、编程技巧和逻辑思维能力。本文将深入探讨一些常见的C语言面试题,帮助你了解面试官...

    java经典面试题100道

    java面试题100道,非常经典,希望对大家面试有所帮助。

    LINUX内核经典面试题

    【Linux内核经典面试题详解】 1. Linux内核锁:Linux内核中主要有自旋锁和信号量两种锁机制。自旋锁用于保护短暂的、不会引起阻塞的临界区,而信号量则允许任务在无法获取锁时进入睡眠状态,适合处理可能长时间持有...

Global site tag (gtag.js) - Google Analytics