十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

华为机试 Python 模板一页纸(直接复制,考前背诵)

华为机试 Python 模板一页纸(直接复制,考前背诵) 华为机试 Python 模板一页纸直接复制考前背诵适用牛客华为机试全部标准输入输出所有模板都用 stdin / print去掉调试print再提交重点3道题一般字符串模拟 / 哈希/排序 / BFS/DFS/DP优先拿简单题满分一、万能输入模板最常用必背importsysfromcollectionsimportdeque,Counter,defaultdictimportheapq# 读取全部输入按行分割【大数据推荐防止input超时】linessys.stdin.read().splitlines()# 读取单行分割成整数列表# arr list(map(int, lines[0].split()))# 读取多行每行一组数字# for line in lines:# nums list(map(int, line.split()))小提示split()自动忽略任意数量空格、tab不要写split( )二、常用数据结构模板1. 栈 Stacklist模拟LIFOst[]st.append(x)#入栈st.pop()#出栈末尾st[-1]#取栈顶ifst:#判非空2. 队列 dequeBFS专用不要用list pop(0)qdeque()q.append(x)#队尾入队q.popleft()#队首出队 O(1)q[0]#队首元素ifq:#判空3. 哈希统计 Counter频次统计cntCounter(arr)cnt[x]#x出现次数cnt.most_common(k)#前k高频 [(val,count)]4. defaultdict 字典图邻接表、分组# 计数ddefaultdict(int)d[key]1# 邻接表graphdefaultdict(list)graph[u].append(v)5. 堆 heapq最小堆大顶堆存负数#最小堆heap[]heapq.heappush(heap,num)min_valheapq.heappop(heap)#大顶堆maxheap[]heapq.heappush(maxheap,-num)max_val-heapq.heappop(maxheap)三、高频算法模板1. 排序 自定义排序华为超级高频#普通升序arr.sort()#降序arr.sort(reverseTrue)#自定义key例如按第二个元素升序arr.sort(keylambdax:x[1])#按第二个降序第一个升序arr.sort(keylambdax:(-x[1],x[0]))2. 二分查找有序数组找左边界/目标# 查找target是否存在返回下标不存在返回-1defbinary_search(nums,target):l,r0,len(nums)-1whilelr:mid(lr)//2ifnums[mid]target:returnmidelifnums[mid]target:lmid1else:rmid-1return-13. BFS 广度优先搜索迷宫、图、层序遍历背这个defbfs(start,graph):visitedset()qdeque()q.append(start)visited.add(start)whileq:curq.popleft()# 处理当前节点逻辑fornxtingraph[cur]:ifnxtnotinvisited:visited.add(nxt)q.append(nxt)网格BFS上下左右四个方向dirs[(-1,0),(1,0),(0,-1),(0,1)]fordx,dyindirs:nxxdx nyydy#判断边界、是否访问4. DFS 深度优先搜索递归版简单图/树⚠️ 数据量大递归会栈溢出大数据改用迭代DFSdefdfs(cur,graph,visited):visited.add(cur)#处理curfornxtingraph[cur]:ifnxtnotinvisited:dfs(nxt,graph,visited)迭代版DFS避免递归爆栈defdfs_iter(start,graph):visitedset()st[start]whilest:curst.pop()ifcurinvisited:continuevisited.add(cur)fornxtingraph[cur]:ifnxtnotinvisited:st.append(nxt)5. 滑动窗口最长子串、子数组求满足条件区间left0res0forrightinrange(len(arr)):# 右指针移入窗口# 不满足条件移动左指针while不满足条件:# 移出窗口left1# 更新答案resmax(res,right-left1)6. 双指针有序数组两数之和、原地移除元素l0rlen(nums)-1whilelr:snums[l]nums[r]ifstarget:l1r-1elifstarget:l1else:r-17. 并查集 Union-Find连通块、朋友圈图连通性高频classUnionFind:def__init__(self,size):self.parentlist(range(size))deffind(self,x):ifself.parent[x]!x:self.parent[x]self.find(self.parent[x])#路径压缩returnself.parent[x]defunion(self,x,y):x_rootself.find(x)y_rootself.find(y)ifx_root!y_root:self.parent[y_root]x_root8. 动态规划 DP一维模板# dp[i] 代表前i个状态的值dp[0]*n#初始化dp[0], dp[1]foriinrange(2,n):dp[i]状态转移方程 ansdp[-1]四、数学常用工具模板#最大公约数 gcdimportmath gmath.gcd(a,b)#最小公倍数 lcmdeflcm(a,b):returna*b//math.gcd(a,b)#质数判断defis_prime(x):ifx2:returnFalseforiinrange(2,int(x**0.5)1):ifx%i0:returnFalsereturnTrue五、字符串常用操作第一题基本都是字符串sinput().strip()s.split()#分割s.strip()#去除首尾空格s.lower()/s.upper()#大小写转换s.replace(a,b)#替换subins#子串判断list(s)#字符串转字符数组.join(char_list)#字符列表转回字符串六、机试必看避坑清单写在草稿纸上✅ 输入用 sys.stdin.read() 处理多行大数据避免input超时✅ BFS队列只用deque禁止list.pop(0)O(n)超时✅ 输出只打印答案不要中文提示多余空格/换行容易WA✅ 样例通过≠AC测试边界0、空输入、单元素、极大值✅ 递归DFS大数据栈溢出 → 改用迭代DFS✅ 字典key只能是不可变类型 int/str/tuplelist不能当key✅ 多组输入要看题目描述循环读取每行✅ 提交前删掉所有调试print七、快速选型对照表需求推荐模板统计字符/数字频次Counter / defaultdict(int)找TopK、第K大heapq迷宫、最短路径、层序遍历BFS deque连通块、朋友圈并查集UnionFind最长子串连续区间滑动窗口有序数组查找二分查找自定义排序sort lambda key括号匹配、逆序Stack如果你需要我可以单独出华为机试字符串专项模板或者BFS迷宫完整可直接提交样题。
返回列表