纵观国内头部大厂的算法面试情况,可以说是诸神内卷,全员团灭。

而2021年的趋势是DP、KMP等都是信手拈来,个别公司还要求你手写实现,LC刷题数至少得达到300+,而且必须对题目有深刻的理解,能很好地应对难题、变形题和扩展题。
为此,九章也搜集了LC上的部分难题,各位不妨来试试自己能不能秒杀市面上的难题(文末有福利):
1772·子集数量
难度:☆☆☆☆
对于一个集合中的每个元素x,2x和3x均不在这个集合中。则称这个集合为好集合。
给定一个整数n。好集合中的元素大小在[1,n]中间。请你求出满足条件的好集合的个数。答案对1000000007取模。
n<=100000
输入:n=4
输出:ans=8
【样例解释】
有8 个集合满足要求,分别是空集,{1},{1,4},{2},{2,3},{3},{3,4},{4}。
免费做题链接:LintCode 领扣
1516·异或和
难度:☆☆☆☆
给定一个n×m矩阵arr
,矩阵中的路径定义为从(0, 0) 走到 (n-1, m-1) 且只能往下和往右走。对于每一条路径都有一个goal
,goal
等于这条路径上经过的所有数的异或。 现在你需要找到有多少条路径上的goal
等于target
,返回这个数目。
- xor操作是按位异或,在Java或C ++或python中表示为“ ^”
- 对xor有疑问可查询xor
- 1<=n,m<=20
样例1
输入:arr=[[2,1,5],[7,10,0],[12,6,4]],target=11
输出:3
解释:
2 1 5
7 10 0
12 6 4
(0,0)→(1,0)→(2,0)→(2,1)→(2,2). 2^7^12^6^4=11
(0,0)→(1,0)→(1,1)→(1,2)→(2,2). 2^7^10^0^4=11
(0,0)→(0,1)→(1,1)→(2,1)→(2,2). 2^1^10^6^4=11
样例2
输入:arr=[[1,3,3,3],[0,3,3,2],[3,0,1,1]],target=2
输出:5
免费做题链接:LintCode 领扣
1384·段式石子归并
有一个石子归并的游戏。最开始的时候,有n
堆石子排成一列,目标是要将所有的石子合并成一堆。合并规则如下:
- 每一次可以合并连续
x
堆石子,left <= x <= right
- 每次合并的代价为所合并的
x
堆石子的重量之和
求出最小的合并代价,如果无法完成合并返回0
。
1 <= n <= 100
,2 <= left <= right <= n
1 <= weight[i] <= 1000
1769·方格取数
难度:☆☆☆☆☆
在一个有 m*n
个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。
n, m \leq 100n,m≤100
样例1
输入: mp=[[1,2,3],[3,2,3],[2,3,1]]
输出: 11
解释:
2+3+3+3=11
样例2
输入: mp=[[1,3],[4,5]]
输出:7
解释:
3+4=7
免费做题链接:LintCode 领扣
1758·矩形覆盖面积
难度:☆☆☆☆
给定n
个矩形的左下角和右上角的坐标,求所有矩形最后的覆盖的总面积。
n
不超过100- 坐标的值都大于0且小于100000
样例1
输入: a=[[10,10,20,20],[15,15,25,25.5]]`
输出: 180
解释:
坐标分别为(10,10),(20,20) 和(15,15),(25,25.5)的两个矩形的面积是180。
样例2
输入: a=[[10,10,20,20]]`
输出: 100
解释:
坐标分别为 (10,10),(20,20) 的面积是100。
免费做题链接:LintCode 领扣