打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
拿下Java的10大算法,你的梦想就实现了一半!!!

现在是5月份,也是每年开年企业公司招聘的高峰期,同时有许多的Java实习生也出来找工作。现在的招聘他们有时会给你出一套面试题或者智力测试题,也有的直接让你上机操作,写一段程序。算法的计算不乏出现,基于这个原因我自己搜集了一些算法上的题型。希望对于大家有所帮助。

面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而Java程序员在代码面试时,常会遇到编写Java算法的相关问题,比如排序、二叉树遍历等等。

这里我只普遍给大家讲解一下,Java代码面试中比较常用的10大算法吧。各位大佬们肯定是嗤之以鼻的,但希望能给一些新手和即将踏上工作岗位的小伙伴一点帮助吧。真心希望看到这篇文章的兄弟姐妹都能一下子就能面试成功。

1.String/Array/Matrix

在Java中,String是一个包含char数组和其它字段、方法的类。如果没有IDE自动完成代码,下面这个方法大家应该记住:

String/arrays很容易理解,但与它们有关的问题常常需要高级的算法去解决,例如动态编程、递归等。

下面列出一些需要高级算法才能解决的经典问题:(这些问题请自行百度)

  • Evaluate Reverse Polish Notation

  • Longest Palindromic Substring

  • 单词分割

  • 字梯

  • Median of Two Sorted Arrays

  • 正则表达式匹配

  • 合并间隔

  • 插入间隔

  • Two Sum

  • 3Sum

  • 4Sum

  • 3Sum Closest

  • String to Integer

  • 合并排序数组

  • Valid Parentheses

  • 实现strStr

  • Set Matrix Zeroes

  • 搜索插入位置

  • Longest Consecutive Sequence

  • Valid Palindrome

  • 螺旋矩阵

  • 搜索一个二维矩阵

  • 旋转图像

  • 三角形

  • Distinct Subsequences Total

  • Maximum Subarray

  • 删除重复的排序数组

  • 删除重复的排序数组2

  • 查找没有重复的最长子串

  • 包含两个独特字符的最长子串

  • Palindrome Partitioning

如果想要更多的企业求职加分项目,案例,可以来一下我的Java群632119504,每天都会精挑细选一个特效,项目出来详细讲解,分享!包括答疑解惑!

2.链表

在Java中实现链表是非常简单的,每个节点都有一个值,然后把它链接到下一个节点。比较流行的两个链表例子就是栈和队列。值得一提的是,Java标准库中已经包含一个叫做Stack的类,链表也可以作为一个队列使用(add和remove)。(链表实现队列接口)如果你在面试过程中,需要用到栈或队列解决问题时,你可以直接使用它们。

在实际中,需要用到链表的算法有:

  • 插入两个数字

  • 重新排序列表

  • 链表周期

  • Copy List with Random Pointer

  • 合并两个有序列表

  • 合并多个排序列表

  • 从排序列表中删除重复的

  • 分区列表

  • LRU缓存

3.树&堆(这里的树通常是指二叉树。)

下面是一些与二叉树有关的概念:

二叉树搜索:对于所有节点,顺序是:left children <= current="" node=""><= right="">

平衡vs.非平衡:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树;

满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点;

完美二叉树(Perfect Binary Tree):一个满二叉树,所有叶子都在同一个深度或同一级,并且每个父节点都有两个子节点;

完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

堆(Heap)是一个基于树的数据结构,也可以称为优先队列( PriorityQueue),在队列中,调度程序反复提取队列中第一个作业并运行,因而实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构

下面列出一些基于二叉树和堆的算法:

  • 二叉树前序遍历

  • 二叉树中序遍历

  • 二叉树后序遍历

  • 字梯

  • 验证二叉查找树

  • 把二叉树变平放到链表里

  • 二叉树路径和

  • 从前序和后序构建二叉树

  • 把有序数组转换为二叉查找树

  • 把有序列表转为二叉查找树

  • 最小深度二叉树

  • 二叉树最大路径和

  • 平衡二叉树

4.Graph

与Graph相关的问题主要集中在深度优先搜索和宽度优先搜索。深度优先搜索非常简单,你可以从根节点开始循环整个邻居节点。下面是一个非常简单的宽度优先搜索例子,核心是用队列去存储节点。

第一步,定义一个GraphNode

第二步,定义一个队列

第三步,使用队列进行宽度优先搜索

实际中,基于Graph需要经常用到的算法:克隆Graph

5.排序

不同排序算法的时间复杂度,大家可以到wiki上查看它们的基本思想。

BinSort、Radix Sort和CountSort使用了不同的假设,所有,它们不是一般的排序方法。

算法的排序:归并排序/快速排序/插入排序

6.递归和迭代(如果想要更多的企业求职加分项目,案例,可以来一下我的Java群632119504,每天都会精挑细选一个特效,项目出来详细讲解,分享!包括答疑解惑!)

这个就不多说了,太简单了

7.动态规划

动态规划主要用来解决如下技术问题:

通过较小的子例来解决一个实例;

对于一个较小的实例,可能需要许多个解决方案;

把较小实例的解决方案存储在一个表中,一旦遇上,就很容易解决;

附加空间用来节省时间。

上面所列的爬台阶问题完全符合这四个属性,因此,可以使用动态规划来解决:

一些基于动态规划的算法:

  • 编辑距离

  • 最长回文子串

  • 单词分割

  • 最大的子数组

8.位操作

位操作符:

从一个给定的数n中找位i(i从0开始,然后向右开始)

典型的位算法:

  • Find Single Number

  • Maximum Binary Gap

9.概率

通常要解决概率相关问题,都需要很好地格式化问题,下面提供一个简单的例子:

有50个人在一个房间,那么有两个人是同一天生日的可能性有多大?(忽略闰年,即一年有365天)

算法,结果calculateProbability(50) = 0.97

10.组合和排列

组合和排列的主要差别在于顺序是否重要。

例1:

1、2、3、4、5这5个数字,输出不同的顺序,其中4不可以排在第三位,3和5不能相邻,请问有多少种组合?

例2:

有5个香蕉、4个梨、3个苹果,假设每种水果都是一样的,请问有多少种不同的组合?

基于它们的一些常见算法

  • 排列

  • 排列2

  • 排列顺序

一般的笔试时,写程序都不会太难,都是比较简单的算法问题。所以,希望广大实习生们切记不要因小失大。多注意注意细节,在这毕业高峰期尽早的早到一份合适的工作,关于本文具体的算法知识,请大家自行百度解决,是在解决不了的可以来我的Java群632119504群寻求帮助。

最后求一下关注吧,感觉有用就关注一下公众号吧。每天给大家带来不一样的Java黑科技和面试宝典哦

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
后端通用教程(六)
Noi数据结构知识点
30 个重要数据结构和算法完整介绍(建议收藏保存)
码农也要学算法
面试10大算法汇总+常见题目解答
630页!熬夜整理出的''高分宝典'':算法 数据结构 网络 操作系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服