笔试真题
此专栏专门收录大厂笔试题的题解。
abant2
世界上最菜的arcem
展开
-
ZJ14 最大子区间 单调栈问题
此题其实和leetcode 84题解法是相同的。找到最小值,中心扩散求最大边界,取最大值。单调栈可以很方便的找到他的边界。此题的一点变化是我们需要构建一个前缀和数组。 N = int(input()) nums = [0] + list(map(int, input().split(' '))) + [0] pre = [0 for _ in nums] # 构建前缀和数组 sum0 = 0 for i, num in enumerate(nums): sum0 += num pre[i]原创 2021-03-13 16:26:05 · 151 阅读 · 0 评论 -
ZJ20 DFS回溯
这题一看人都麻了,完全没思路。无奈看了题解,发现这题完全是可以用dfs的,由于每次抽三张牌,导致dfs的深度最多只有4。咱们采用回溯的做法即可。由于咱们是以一个节点往后看,所以从1到9开始抽牌。 from collections import Counter l = list(map(int, input().split(' '))) d = Counter(l) for i in range(1, 10): if i not in d: d[i] = 0 def dfs(rema原创 2021-03-10 19:06:29 · 65 阅读 · 0 评论 -
ZJ2 足球 数学解方程
此题真的是做的我难受的很。题目给出了三个队伍的差,但没说是正还是负,咱们的目标就是得到这三个数,之后就可以返回结果。实际操作中,并不需要真正解出这三个数,因为情况很多要分类讨论,咱们要满足解出的每个数>0,并且剩下的够分。代码很简洁,但是思路挺乱,最好提前写好注释,以小的为基础列方程。 N = int(input()) for i in range(N): l = list(map(int, input().split(' '))) n, k, d1, d2 = l[0], l[1],原创 2021-03-10 16:39:24 · 141 阅读 · 0 评论 -
ZJ19 双指针 三个站点
这题一看题我当场暴力。。结果就超时。仔细一看题,发现中间那个没什么卵用。双指针是解决这题很好的方法,可以用来找左右边界。固定的双指针模板会每次固定右边界,所以咱们对左边的数组取2的组合即可。 from math import factorial MOD = 99997867 N, D = input().split(' ') N, D = int(N), int(D) builds = [] o = input().split(' ') for c in o: builds.append(int(原创 2021-03-09 23:31:02 · 133 阅读 · 0 评论