互联网后台开发校招面经算法总结--JAVA 语言

1,在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

(腾讯提前批)

主要三个方法:1,排序之后打印len-k个元素;2,使用堆;3,使用二分排序思想,使左边元素数目为K-1个,则基数值就是所求.

答案分析:找到数组中第K大元素(leetcode215)

 

2,给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

(腾讯提前批)

面试官要求不能使用递归,那我们使用while(l<=r)循环即可

答案分析:非递归二分查找(leetcode704)

 

3,给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

(腾讯提前批,字节跳动)

亲身经历的一道题,没写出来(后来登录leetcode发现做过这道题.....)

需要注意: 1,用int表示是否进位,既能起标志作用,又能参与计算

                 2,别忘了最后两数相加如果进位则新增一个节点值为1的节点放到最后

答案分析:链表两数相加(leetcode2)

 

4,找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad”.

(腾讯提前批)

这个题目比较高级的理解就是我们列出一个二维矩阵,如果相等标为1,最长的1对角线即为答案,过程利用dp求解

答案分析:最长公共子串(lintcode79)

 

5,反转链表

(大小企业面试中均有出现)

应该熟练掌握递归和迭代两种方法求解,通过画图理解更容易

答案分析:反转链表(leetcode206)

 

6,给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

(腾讯提前批,字节跳动)

答案分析:二叉树右视图(leetcode199)

 

7,用Rand5()实现Rand7();用Rand7()实现Rand10()

(字节跳动)

答案分析:用Rand5()实现Rand7()

 

8,LRU缓存机制

(大小企业面试中均有出现)

答案分析:LRU缓存机制(leetcode146)

 

9,给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]

(字节跳动)

答案分析:在排序数组中查找元素的第一个和最后一个位置(leetcode34)

 

10,三个线程轮流打印ABCABCABC

(阿里巴巴)

答案分析:三个线程轮流打印ABCABCABC

 

11,给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。

(字节跳动)

答案分析:二叉树的直径(leetcode543)

 

12,二叉树非递归前序,中序,后序遍历

(字节跳动)

答案分析:二叉树非递归前序,中序,后序遍历

 

13,手写单例模式

答案分析:手写单例模式

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(面经解析,算法练习)