互联网后台开发校招面经算法总结--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()

猜你喜欢

转载自blog.csdn.net/ailaojie/article/details/88605626