小红书前端笔试4.7+3.26(附题解)
笔试说明
笔试得分60%一般通过,面试答对80%才能通过
一般过了3道编程,过了1.5就差不多,2就稳了。但是不绝对,有的一道题也会让你面试,有的a了2,也不一定有面试机会
有没有面试机会更多看的是卷的程度,学历能提分
平台
连同一平台的笔试模式也可能不同,千万不能掉以轻心,比如百度牛客网,我以为和之前的SHINE在牛客网上的笔试一样是核心代码模式。笔试平台都会提供输入输出示例,但是考试时现场学浪费时间。
一般是允许本地编程的,建议本地编程,因为有时候平台代码提示功能不好,比如拼写错误检查费时。
记得考前清空本地IDE代码,准备好空模板,不要在考试时一打开就是上次的代码,含有代码的IDE有可能被记为作弊。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!ACM模式和普通的核心代码模式完全不一样!!!!!!!!!!!!!!
所以大家一定,一定提前练习牛客的输入输出和赛码网的输入输出!!!一定提前练习!!!!
牛客的输入输出练习看这,没空的可以直接看模板前端笔试常考数据结构,ACM模板,经典算法
赛码网的大家直接去赛码网,不过其实和牛客的差不多,只不过是函数的区别,比如readline()和read_line()这样的区别~
编程
请养成,随手保存代码的好习惯,以防出现意外。
得分=AC率*总分
能力不足的情况下,编程题一定要把握好节奏,明白初心是通过笔试,而不是全部做出来。
小红书
赛码网上笔试,建议提前了解输入输出
笔试得分60%一般通过,面试答对80%才能通过
单选20题40分+编程3题60分
4.7选择题
知识点覆盖到HTML+CSS+JS+数据库+操作系统+数据结构与算法
小红书:前端,计算机基础,常规算法(前端:计算机基础=3:1)
计算机基础(数据库,操作系统,数据结构与算法,计算机网络)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!4.7单选和多选题是混着出的,一定要注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 图片中定义标题的标签是什么(<figcaption>)
- Mysql中set names utf18的简写
- 场景题:完全背包问题
- 斐波拉契数列中的第15项是什么
- 长度为10的有序表静心等概率的查找,成功平均查找长度是多少((n+1)/2)
- 协作图的元素有哪些
- display设置为什么的时候,为内联元素(inline)
- 内存有哪些(堆,栈)
- 场景题:进程中的直接关系
- 看代码选输出(x2)
4.7编程
1.给定一颗树,删除某边,使得分裂的两个树的结点数绝对值最小
2.给出正整数n,X,C,有n类体积为xi,物质为yi单位的溶液进行配比(例如i和j配比,体积=xi+xj,物质=yi+yj),当体积相等时,物质=yi+yj+X,当n类溶液数量不限,生产的新溶液也可以接着和其他溶液配比,求当配比总溶液为C时,最大的物质能有多
3.双色球编号为1-n,当红球在袋子里,红球的编号每秒+1,蓝球编号每秒-1,每次操作分类ti时刻向袋子中放入球,从袋子中取出球,以及询问当前所有袋子中编号和(初始情况下袋子中没有球)
T1: 平衡(DFS)
对于树的每条边,记录子节点所在子树的节点个数为m,则平衡值为abs(2m - n),用dfs遍历子树即可。
from collections import defaultdict def solve(n, edges): score, fa, ans = [1] * n, [-1] * n, [] ch = defaultdict(list) for u, v in edges: ch[v - 1].append(u - 1) fa[u - 1] = v - 1 root = fa.index(-1) def dfs(x): for y in ch[x]: score[x] += dfs(y) ans.append(abs(2 * score[x] - n)) return score[x] dfs(root) minv = min(ans) return minv, ans.count(minv) n = int(input()) edges = [] for _ in range(n - 1): s, t = map(int, input().split()) edges.append((s, t)) print(*solve(n, edges))
T2: 配制溶液(动态规划)
记dp[i]为溶液体积为i时物质含量的最大值,状态转移方程为
dp[i] = dp[j] + dp[i - j], if 2 * j != i;
dp[i] = dp[j] + dp[i - j] + X, if 2 * j == i.
复杂度为O(n^2),n<=1000能通过。
def solve(volumns, weights, add, target): dp = [-float('inf')] * (target + 1) for v, w in zip(volumns, weights): dp[v] = max(dp[v], w) for i in range(1, target + 1): for j in range(1, i): dp[i] = max(dp[i], dp[j] + dp[i - j] + add * (2 * j == i)) return dp[-1] _, add, target = map(int, input().split()) volumns = list(map(int, input().split())) weights = list(map(int, input().split())) print(solve(volumns, weights, add, target))
T3: 袋子和球(模拟)
变量比较多,比较复杂地模拟一遍即可,注释写代码里了,复杂度O(m).
def solve(nums, colors, times, operations): ans, puttime = [], [0] * len(nums) # 查询答案,记录每个球的入袋时间 rcnt = bcnt = sum = last = 0 # 红球数,蓝球数,当前总和,上一次操作时间 for t, op in zip(times, operations): sum += (t - last) * (rcnt - bcnt) if op == 0: ans.append(sum) elif op > 0: if colors[op - 1] == 'R': rcnt += 1 else: bcnt += 1 puttime[op - 1] = t sum += nums[op - 1] elif op < 0: if colors[-op - 1] == 'R': rcnt -= 1 nums[-op - 1] += t - puttime[-op - 1] else: bcnt -= 1 nums[-op - 1] -= t - puttime[-op - 1] sum -= nums[-op - 1] last = t return ans n = int(input()) nums = list(map(int, input().split())) colors = list(input()) m = int(input()) times = list(map(int, input().split())) operations = list(map(int, input().split())) ans = solve(nums, colors, times, operations) print(len(ans), *ans)
以上代码来自https://www.nowcoder.com/discuss/474696203855204352
3.26编程
1.加密:a-z中的任意字母加密模式为往后移动三位,超过z的,会循环到a处,求加密前的字符串
2.K排序:每次取数组中k个元素,排好序后,放到数组末尾,其他的元素往前移动,求最少需要几趟排序
以上图片来自https://www.nowcoder.com/feed/main/detail/54d4244641374ef18fb2cb7c4f0a0545
3.涂色:对数组Left,Right区间的元素,与指定的X进行‘|’,‘&’,‘=’,求M趟后的数组
该图片来自https://www.nowcoder.com/discuss/469566137949306880?sourceSSR=search
个人感觉4.7(23届春招补录+24届暑假实习一起考)比3.26(24届暑假实习小红书前端笔试3.26总结选择题要容易,但编程题要难。
#小红书##前端##笔试##软件开发2023笔面经##实习#