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,手写单例模式
答案分析:手写单例模式