一道面试题的思考

来源:互联网 发布:网络上弧是什么意思 编辑:程序博客网 时间:2024/03/28 23:48

前两天,去看见一个面试题目,如下:

     不使用中间变量的情况下,怎么直接实现两个数的互换?

最容易想好的方法就是使用中间变量

public static void swap(int x,int y){      int temp = x;       x = y;      y = temp;      System.out.println(x+""+y);}


但题目要求不使用中间变量。于是就不知道怎么弄了。问百度,发现还有几种方法,具体直接通过程序显示如下:

 

/** * @author ZDQ *  */public class SwapTest {public static void swap1(int x, int y) {int temp;temp = x;x = y;y = temp;}public static void swap2(int x, int y) {System.out.println("方法一:加减(会造成溢出)");x = x + y;y = x - y;x = x - y;System.out.println(x + " " + y);}public static void swap3(int x, int y) {System.out.println("方法二:乘除(会造成溢出)");x = x * y;y = x / y;x = x / y;System.out.println(x + " " + y);}public static void swap4(int x, int y) {System.out.println("方法三:异或");x = x ^ y;y = x ^ y;x = x ^ y;System.out.println(x + " " + y);}/** * @param args */public static void main(String[] args) {int a = 1;int b = 2;// 方法一swap2(a,b);// 方法二int a1 = 3;int b1 = 4;swap3(a1,b1);// 方法三int a2 = 5;int b2 = 6;swap4(a2,b2);}}
结果如下:

方法一:加减(会造成溢出)
2 1
方法二:乘除(会造成溢出)
4 3
方法三:异或
6 5

说明:使用加减操作的时候,当两个数的和超出范围时,就会异常。乘除操作时,就更容易溢出,且除数不能为0.

异或则是根据的数据的编码得推到的。

 

PS:主要说的是,拿到两个数的交换问题,首先想到的是,利用中间变量实现。

而题目规定不能采用中间变量,看看其他的几种方式,可能异或想不到,但是加减应该是可以考虑到的。

之所以,拿到题目不值所云,主要就是缺少一个思考问题的习惯,现在的工作主要针对一些规范的API调用,致使大脑很多时候就按照规范的模式在运转,缺乏独立思考创造的能力。

鉴于此,个人应该花一些时间在算法题目上。

 

原创粉丝点击