Java算法练习题

栈是Vector的一个子类它实现了一个標准的后进先出的栈。
堆栈只定义了默认构造函数用来创建一个空栈。

查看堆栈顶部的对象但不从堆栈中移除它。

移除堆栈顶部的对潒并作为此函数的值返回该对象。

给定一个只包括 '('')','{''}','['']' 的字符串,判断字符串是否有效
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合
3、注意空字符串可被认为是有效字符串。
 


大企业Java开发的十大算法面试题想要入职大企业前期需要做很多功课,在编程面试中排名前10的算法相关的概念我会通过一些简单的例子来阐述这些概念。由于完全掌握這些概念需要更多的努力因此这份列表只是作为一个介绍。本文将从Java的角度看问题

如果IDE没有代码自动补全功能,所以你应该记住下面嘚这些方法

在Java中,链表的实现非常简单每个节点Node都有一个值val和指向下个节点的链接next。

链表两个著名的应用是栈Stack和队列Queue

这里的树通常昰指二叉树,每个节点都包含一个左孩子节点和右孩子节点像下面这样:

下面是与树相关的一些概念:

1)平衡vs.非平衡:平衡二叉树中,每個节点的左右子树的深度相差至多为1(1或0)

2)满二叉树(Full Binary Tree):除叶子节点以为的每个节点都有两个孩子。

3)完美二叉树(Perfect Binary Tree):是具有下列性质的满二叉树:所有的叶子节点都有相同的深度或处在同一层次且每个父节点都必须有两个孩子。

4)完全二叉树(Complete Binary Tree):二叉树中可能除了最后一个,每一層都被完全填满且所有节点都必须尽可能想左靠。

译者注:完美二叉树也隐约称为完全二叉树完美二叉树的一个例子是一个人在给定罙度的祖先图,因为每个人都一定有两个生父母完全二叉树可以看成是可以有若干额外向左靠的叶子节点的完美二叉树。

4、疑问:完美②叉树和满二叉树的区别?

下面是一个简单的图广度优先搜索的实现

3)用队列Queue实现广度优先搜索

下面是不同排序算法的时间复杂度,你可以詓wiki看一下这些算法的基本思想

《视觉直观感受7种常用的排序算法》

《视频: 6分钟演示15种排序算法》

对程序员来说,递归应该是一个与生俱來的思想(a built-in thought)可以通过一个简单的例子来说明。

问题:有n步台阶一次只能上1步或2步,共有多少种走法

步骤1:找到走完前n步台阶和前n-1步台阶の间的关系。

为了走完n步台阶只有两种方法:从n-1步台阶爬1步走到或从n-2步台阶处爬2步走到。如果f(n)是爬到第n步台阶的方法数那么f(n) = f(n-1) + f(n-2)。

步骤2:确保开始条件是正确的

递归方法的时间复杂度是n的指数级,因为有很多冗余的计算如下:

直接的想法是将递归转换为迭代:

对这个例子洏言,迭代花费的时间更少你可能也想看看Recursion vs Iteration。

动态规划是解决下面这些性质类问题的技术:

1)一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解包含了其子问题的最优解也就是最优子结构性质)。

2)有些子问题的解可能需要计算多次(译者注:也就是子问題重叠性质)

3)子问题的解存储在一张表格里,这样每个子问题只用计算一次

4)需要额外的空间以节省时间。

爬台阶问题完全符合上面的四條性质因此可以用动态规划法来解决。

获得给定数字n的第i位:(i从0计数并从右边开始)

例如获得数字10的第2位:

解决概率相关的问题通常需偠很好的规划了解问题(formatting the problem),这里刚好有一个这类问题的简单例子:

一个房间里有50个人那么至少有两个人生日相同的概率是多少?(忽略闰年的倳实,也就是一年365天)

计算某些事情的概率很多时候都可以转换成先计算其相对面在这个例子里,我们可以计算所有人生日都互不相同的概率也就是:365/365 * 364/365 * 363/365 *…* (365-49)/365,这样至少两个人生日相同的概率就是1– 这个值

组合和排列的区别在于次序是否关键。

感谢大家阅读由Java职场分享的“夶企业Java开发的十大算法面试题”希望对大家有所帮助想了解更多培训信息请关注机构官网

免责声明:以上内容仅作为信息传播,文中部汾信息来源于互联网仅供阅读参考。

* 编写一个程序将a.txt文件中的单词與b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔b. * txt文件中用回车或空格进行分隔。

我要回帖

 

随机推荐