贝壳2021提前批笔试8.11
1.回文字符串
给定一个字符串str,每次可以对其中的一个字符进行修改,统计将其变为回文字符串至少要修改几次。
非常简单,前后两指针进行比较,统计不同的字符数即可。
2.颜色填充
题目:
m*n的矩阵,对其中的每个格子进行填充,有以下规则:
1.每个格子必须填充
2.相邻格子颜色不同
3.每种颜色的格子数相同
求,至少需要多少中颜色。
思路:
- 其实两种颜色就能实现填充m*n格子,且相邻格子的颜色不同
- 为了使所有颜色的格子数相同,我们要找m*n的最小因子
3.数组中最大子数组的最小长度
给定一个数组nums, 找出其所有具有最大值的子数组的最短长度。其中,数组的值定义如下:
1 | 数组[a1, a2, a3]的值 = a1 | a2 | a3 |
数据范围:
1 | nums.length() <= 10^6 |
分析:
- 根据数据范围,算法复杂度必须小于O(n^2)
- 数组的最大值,就是所有元素或的结果
- 需要map进行记录,前面的状态(记录最近的,让第j位变成1的位置i)
- 题型类似Leetcode325:这类题都是找最大、最小的子数组,只不过条件不同。
1 |
|
非常可惜,当时没有做出来。
4.图的最大生成树
n个城市,m条道路,每条道路具有一定的客流量。现在要去掉几条道路,使得城市之间是可达的,且剩余道路的总客流量最大。若无法可达,则输出-1,否则输出总客流量对10^9+7取余
1 | a b c d |
代表城市a和b之间的客流量为:
$$
C_c^d
$$
1 | n<=10^3 |
分析:
- dfs方法,会遍历所有的边,指数级增长,肯定会超时
- 这道题本质是求图的最大生成树
- 图的相关算法需要总结,太陌生了
使用普利姆算法,贪心的求最大生成树,只能通过40%:
原文作者: NTJD
原文链接: http://yoursite.com/2020/08/11/贝壳笔试8.11/
版权声明: 转载请注明出处(必须保留作者署名及链接)