算法汇总



1.指针JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误
2.多重继承 c++支持多重继承,这是c++的一个特征
3.Java程序中所有的对象都是用new操作符建立在内存堆栈上,他认为内存管理太重要了。不应该由程序员去支配,c++认为内存关系太重要了,应该由程序员去支配。
4.Java不支持操作符重载,在java里面,重载的运算符只有两个:一个是+,一个是+=。
5. 给你一个数组,求它的一个子串,使该子串的和最大。 这是典型的最大子串和问题,我直接就说这是个经典的动态规划问题:
法一:令F[m]表示以第m个数为结尾的所有子串中和最大的子串的子串和。则若F[m- 1]>0,则F[m]=F[m-1]+a[m],若F[m-1]<0,则F[m]=a[m]。求出所有F[m]中最大的一个就行了。
法二:就是那种如果加上这位后比这位还小(相当于前面的和是负数,肯定就不要了)。那么久放弃前面的和,以这位为第一位开始往后加。


6.把数组中的数排成最大或者最小的数:你需要自定义比较字符串的规则。553   53   5.比如535字符串与553字符串,应该是"5">"53"  那么就是说:排序后是53   5


7.求树中的两个节点的最低公共祖先。:这个题是模糊的,是二叉树吗?是排序二叉树吗?  如果是排序二叉树,怎么做?从跟节点开始找。如果根节点同事大于这两个,
同时小于这两个。直到一大一小。如果不是二叉树。你就应该问他有没有指向父节点的指针。。


8.把构造函数设为私有的有什么用:1.不能被继承,2.不能再类外定义对象。


finally语句块会执行,如果我们试图从try中跳出。比如break;continue;return;或者发生任意的异常,都会执行finally。这样的话finally仍然会执行。

有以下情况finally不能执行:虚拟机退出了。线程被杀死了。这样就执行不了了。太暴力了。


final  finally  finalize的区别?finalize是在回收某个对象之前会被调用。


反射的作用:动态的获取类的信息;创建类的对象;获取类的成员,方法,域;


Collection.sort()其实就是调用Array.sort();巨牛逼。Arrays.sort();对集合进行排序,也可以Arrays.sort(集合,比较器);传入一个比较器来排序。

首先求一个数组的最长非递减序列,不一定是连续的。怎么求??DP,f(i)表示以i结尾的最长非递减序列。

某个对象按两个条件排序:按第一个排序,第一个相同再按照第二个排序。怎么写代码?对象需要实现comparable接口。实现compareto方法。


堆排序:建堆,从最大的父亲开始建堆。n/2  ---1  1也是父亲。建好后,第一个与最后一个交换,然后只调整第一个。‘’最后一个‘’会越来越小。n,n-1,n2.....第一个与n,n-1,n-2交换。想想原理然后想想代码怎么写?肯定是对low调整对吧。j=2i;j<=high啊。对不对。

二分查找:whilelow<=high  if==   if> low-1

这时就考虑用标志量来记录每趟交换数据的的情况,如flag=0表示没有进行过交换,一旦有数据进行交换则置flag为1,表示已进行过交换,当一趟比较交换完成后,若flag仍为0时,则无须进行下一趟操作,否则若flag为1时,只能继续进行下一趟操作。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值