一道面试题的思考

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

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

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

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调用,致使大脑很多时候就按照规范的模式在运转,缺乏独立思考创造的能力。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值