java算法常见面试题及答案(代码片段)

java364100 java364100     2023-04-17     379

关键词:

随着疫情的好转,各大企业公司纷纷开始复工,招聘也将迎来一个高峰。Java程序员想要在这次疫情后,拿到满意的offer,就必须做好充足的准备。众所周知,算法可以说是大厂面试Java程序员的必问面试题。相信算法的重要性大家都了解,好的算法可以让性能得到万倍提升,做到毫秒级处理千万数据的程度。因此,为了提升大家在面试中的底气,本文整理了一些Java程序员算法面试题并比附上了答案,一起来看看吧!

Java算法常见面试题及答案

1、算法的时间复杂度时候是什么?

答案:算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。

2、合并k个有序(假设升序)数组的具体步骤是什么?

答案:将k个数组的第一个元素取出来,维护一个小顶堆;弹出堆顶元素存入结果数组中,并把该元素所在数组的下一个元素取出来压入队中;调整堆的结构,使其满足小顶堆的定义;重复前两步直到合并完成。

3、解释二分法检索如何工作?

答案:在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。

代码拓展,二分法查找

def BinarySearch(t,x):

t.sort() #对列表进行排序,列表是有序的,是二分法的前提

low = 0;

high = len(t)-1;

while low < high:

    mid = (low+high)/2;

    if t[mid]<x:

        low=mid+1;

    elif t[mid]>x:

        high = mid-1;

    else :

        return mid

return Non

4、查找数组中出现次数超过一半的数字

答案:等价于求数组中第n/2大的数,和4中思想一样,平均时间复杂度O(n)

5、一个数组怎么输出前K大的值、时间复杂度?

答案:借助快排partition的思想,平均时间复杂度是O(n)

6、用A表示1第一列,B表示2第二列,。。。,Z表示26,AA表示27,AB表示28。。。以此类推。请写出一个函数,输入用字母表示的列号编码,输出它是第几列。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

答案:这道题的解题思路关键在于26进制转10进制。

7、输入一个正数n,输出所有和为n 连续正数序列。

答案:输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。

8、输出一个整数二进制表示中1的个数。

答案:这道题的解法多样,可以右移原数判断,如果输入是负数可能陷入死循环;也可以左移1;还可以把一个整数-1后与原数做与运算会消去原数最左边的1。

9、在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

答案:这道算法面试题对大多数Java程序员来讲并不难,大致的解题思路如下,我们注意到这个二维数组的行和列都是升序的,也就是说最上面的一行和最右边的一列在整体上也是升序的,在一个排序数组上查找某个我们会很自然的想起二分法。这样我们每次都把要查找的数和当前剩下的二维数组的右上角数字比较,这样每次我们都可以排除掉一行或一列。算法的时间复杂度是O(n+m),也就是行数加列数。

10、两个排序数组A1和A2,现在想把A2插入A1中并仍保持有序。

答案:数组是个顺序表,我们往数组中插入某个数的话必须要移动当前位置后面所有的数。常规的思路是每次插入一个数并移动后面的数,这样多次插入后会导致数组中有的数被移动了多次,极大浪费了效率。我们希望每个数移动一次就到达它最终的位置,所以我们往往会反向移动数组,这样做的好处是移动当前数时后面的数已经到达了最终位置,我们移动当前数不会影响到后面的数,这样就确保了每个数只被移动一次。

11、斐波那契数列:f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2)

答案:这道算法面试题的解答方法是多样的,可以用递归,不过效率低;还可以用循环,正着推;用矩阵运算也是可以的。

12、给定一个整数序列,你可以删去其中的连续一段(可以不删),求删去后数组的最大连续子段和。

答案:最大连续子序列的变种题,从前往后遍历一遍求最大连续子序列和,然后从后往前遍历一遍求最大连续子序列和。另外,对于删去中间一段不好直接操作的话,可以先从前往后遍历,在从后往前遍历。

13、小明要在t分钟之内做l张饼,有n个锅,但只能选其中k个锅,每个锅每分钟能做vi个饼,最多能做mi个饼,问能不能做完l张饼,如果能,输出最少需要多少分钟;如果不能,输出最多能做几张饼。

答案:查询时先想一下二分。首先判断能不能做完:每个锅在t分钟内能做的饼数为min(mi,vi*t), 降序排列,前k个锅能做出来的饼>l就能;如果不能做完:直接输出前k个锅能做饼的和;如果能:二分最短时间,然后判断在mid分钟内能不能做完饼,判断方法同t分钟的情况。

14、推排序是什么?

答案:堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。

15、快速排序算法是什么?

答案:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;空间复杂度为O(log2n);时间复杂度比较复杂,最好的情况是O(n),最差的情况是O(n2),所以平时说的O(nlogn),为其平均时间复杂度。

16、什么是“哈希算法”,它们用于什么?

答案:“哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统;

17、如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。

答案:求最长公共子串是一道非常经典的动态规划题。输入两个字符串BDCABA 和ABCBDAB,字符串BCBA 和BDAB 都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。

18、如何查找链表是否有循环?

答案:要知道链表是否有循环,我们将采用两个指针的方法;如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。

以上就是关于Java程序员算法面试题的全部整理,这些对应的答案大家可以在做完之后再看。如果有弄不明白的算法面试题,就需要大家好好对算法的相关知识点进行查漏补缺。最后,希望大家都能够顺利通过面试。

spring常见面试题(代码片段)

本文是通过收集网上各种面试指南题目及答案然后经过整理归纳而来,仅仅是为了方便以后回顾,无意冒犯各位原创作者。1.什么是Spring?Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针... 查看详情

java常见面试题及答案(基础题122道,代码题19道)

JAVA相关基础知识1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部... 查看详情

java十九个技术栈常见面试题分享(附答案解析)(代码片段)

Java基础:两个对象的hashCode()相同,则equals()也一定为true,对吗?不对,两个对象的hashCode()相同,equals()不一定true。代码示例:Stringstr1="通话";Stringstr2="重地";System. 查看详情

c++常见面试题之数据结构和算法(代码片段)

1、String原理及实现string类是由模板类basic_string<class_CharT,class_traits,class_alloc>实例化生成的一个类。basic_tring是由_String_base继承而来的。typedefbasic_string<char>string而实际面试由于时间关系,一般不会要求很详细的string的... 查看详情

面经java岗位常见面试题(代码片段)

博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢... 查看详情

java并发常见面试题总结(上)(代码片段)

Java并发常见面试题总结--上什么是线程和进程?何为进程?何为线程?请简要描述线程与进程的关系,区别及优缺点?图解进程和线程的关系程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?一句话简单了解堆和... 查看详情

java学习笔记——常见面试题(代码片段)

最近在网上找了一些Java面试常见问题。其中有一题是这样描述的:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?多资料上对这道题的答案依然是:long和String类型都不符合switch的语法规定,... 查看详情

jvm常见面试题(代码片段)

1.内存模型以及分区,需要详细到每个区放什么。栈区:栈分为java虚拟机栈和本地方法栈重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。每个方法执行都会创建一个栈帧,用于存放局部变量表,操作栈,动态链接... 查看详情

聊聊几个springcloud常见面试题及答案

❝作者:WbwBelief❞全文目录什么是微服务?微服务之间如何独立通讯的?SpringCloud和Dubbo有哪些区别?SpringBoot和SpringCloud之间关系?什么是熔断?什么是服务降级?微服务的优缺点是什么?说下你在项目中碰到的坑。eureka和zookeeper都... 查看详情

面试题redis篇-常见面试题p1(代码片段)

【面试题】Redis篇-常见面试题p1备战实习,会定期的总结常考的面试题,大家一起加油!🎯🎯🎯往期文章:【面试题】计算机网络篇-10道常见面试题p1【面试题】JVM篇-10道常见面试题p1【面试题】Java并... 查看详情

面试题redis篇-常见面试题p1(代码片段)

【面试题】Redis篇-常见面试题p1备战实习,会定期的总结常考的面试题,大家一起加油!🎯🎯🎯往期文章:【面试题】计算机网络篇-10道常见面试题p1【面试题】JVM篇-10道常见面试题p1【面试题】Java并... 查看详情

200+java常见面试题总结《最少必要面试题》(代码片段)

答案解析见文末这份【Java常见面试题总结】我想准备很久了,前面做面试官,后来自己也面了很多一线二线互联网公司,希望通过当下真实经历做一份面试题总结,助力金九银十,喜提心仪Offer。pub哥刚开始... 查看详情

java并发常见面试题总结(下)(代码片段)

Java并发常见面试题总结--下线程池为什么要用线程池?实现Runnable接口和Callable接口的区别执行execute()方法和submit()方法的区别是什么呢?如何创建线程池ThreadPoolExecutor类分析`ThreadPoolExecutor`构造函数重要参数分析`... 查看详情

2020最新java常见面试题及答案

Java最新常见面试题+答案汇总1、面试题模块汇总面试题包括以下十九个模块:Java基础、容器、多线程、反射、对象拷贝、JavaWeb模块、异常、网络、设计模式、Spring/SpringMVC、SpringBoot/SpringCloud、Hibernate、Mybatis、RabbitMQ、Kafka... 查看详情

数据库常见面试题总结

参考如下:数据库常见面试题(开发者篇)数据库优化SQL数据库面试题及答案常见面试题整理--数据库篇 查看详情

java常见面试题及部分答案

1.Redis常见的存储数据类型list(列表类型)set(集合类型)zset(有序集合类型)string(字符串类型)hash(散装类型)2.log4j的级别debug:日志的最低级别,一般一些操作,代码,异常,错误等都会输出,info:info输出的日志是可以最终给用户看... 查看详情

计算机网络常见面试题及答案2022年5月

------------恢复内容开始------------1.OSI、TCP/IP、五层协议的体系结构、以及各层协议作用OSI分层(7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP分层(4层):网络接口层、网际层、运输层、应用... 查看详情

java并发常见面试题总结(中)(代码片段)

Java并发常见面试题总结---中JMM(JavaMemoryModel)volatile关键字如何保证变量的可见性?如何禁止指令重排序?volatile可以保证原子性么?synchronized关键字说一说自己对于synchronized关键字的了解如何使用synchronized关键字?... 查看详情