日期:2014-05-20  浏览次数:20606 次

两个比较有趣的面试题(有算法题,不限于Java)
1.既然StringBuffer比String快,为什么jdk中不去掉String,所有的地方都用StringBuffer.

2.有100个整数,无序.找出其中第50大的数.(这个不限语言,也不要程序,说下方法就可以了,给出时间复杂度,可以先不考虑有重复数,当然考虑了更好).冒泡冒50次的复杂度是n^2.

------解决方案--------------------
1.既然StringBuffer比String快,为什么jdk中不去掉String,所有的地方都用StringBuffer.

StringBuffer在很多时候确实比String快, 但Java设计者把String设计成为不可变类, 就是为了使JVM可以对字符串常量进行特殊处理, 比如共享String对象等等. 所以只有在需要经常改变字符串的内容时才使用StringBuffer. 不需要同步的情况下还可采用StringBuilder进一步提高性能...
------解决方案--------------------
1. 请先解释“StringBuffer比String快”。

2. 参考quick sort的partition部分。懂C++的话可以参考std::nth_element算法。平均复杂度2n。

至于上面用平衡树的朋友,请先列出建立一棵平衡树花费的时间复杂度。

------解决方案--------------------
jk88811(你的就是我的,我的还是我的~!) ( ) 信誉:100 Blog 加为好友 2007-04-07 19:46:17 得分: 0


第2个用平衡二叉树,时间复杂度只有O(logN)~
已有实现,java中的HashTable~~

---------------------------------------------
有HashTable这个类吗? 只知道Hashtable, 可它也不是平衡二叉树啊, 八竿子打不到一块儿...

哥们说的是TreeSet吧...

抱歉,说错了,是
TreeMap <Integer,Integer> tm = new TreeMap <Integer,Integer> ();
j2se自带的排序表~~ TreeMap
------解决方案--------------------
1、如果去掉String,那么以前写的java程序都将在新的jre下运行不起来!而且String存在也有
它自己的意义。

2、这是个排序问题,比较快的话,用快速排序算法,具体算法可以查阅有关书籍。