一道面试题的思考
来源:互联网 发布:网络上弧是什么意思 编辑:程序博客网 时间: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调用,致使大脑很多时候就按照规范的模式在运转,缺乏独立思考创造的能力。
鉴于此,个人应该花一些时间在算法题目上。
- 一道面试题的思考
- 一道面试题的思考。。。
- 一道面试题的思考
- 一道面试题的思考
- 关于一道微软面试题的思考
- 由一道面试题引发的思考
- 一道C面试题引发的思考
- 一道值得思考的面试题
- 对一道微软面试题的思考
- 一道淘宝校园面试题的思考
- 百度一道面试题引发的思考
- 一道面试题引发的思考
- 一道360面试题引发的思考
- 一道360面试题引发的思考
- 一道面试题引发的思考
- 一道面试题引发的思考
- 一道js面试题引发的思考
- 一道面试题引发的思考
- 百度2014移动研发笔试题目——1013清华版
- 单机TCP最大连接数简析
- Windows系统下nodejs安装及配置
- Google工程师多图详解Android系统架构
- MyEclipse svn必备技能之常用菜单
- 一道面试题的思考
- spice server主表面(primary surface)创建过程
- 如何解压cpio.gz文件?
- Oracle Database 软件及补丁下载地址
- java操作json
- oracle 9i/10g/11g安装包和PATCH下载地址汇总
- 创业团队在哪里可以找到靠谱的 iOS 开发工程师?
- java中使用Servlet实现文件上传
- 为MyEclipse 9中的html/JSP编辑器添加代码自动提示