华为笔试0920题解
100-100-97,最后一题太太太复杂了实在调不出最后的3%来了。
T1
n = int(input()) nums = list(map(int, input().split())) target = int(input()) idx = [i for i, x in enumerate(nums) if x == target] if not idx: print(-1, -1) elif idx[-1] - idx[0] == len(idx) - 1: print(idx[0], idx[-1]) else: for i in range(1, len(idx)): if idx[i] - idx[i-1] != 1: print(idx[i], idx[i-1]) break
T2
bfs模板题
from collections import deque m, n = map(int, input().split()) mat = [list(map(int, input().split())) for _ in range(m)] q = deque() dist = [[-1] * n for _ in range(m)] for i in range(m): if mat[i][0] == 1: q.append((i, 0)) dist[i][0] = 0 while q: i, j = q.popleft() for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)]: ni, nj = i + di, j + dj if 0 <= ni < m and 0 <= nj < n and mat[ni][nj] == 1 and dist[ni][nj] == -1: dist[ni][nj] = dist[i][j] + 1 q.append((ni, nj)) print(min([dist[i][-1] for i in range(m) if dist[i][-1] != -1], default=-1))
T3
import re, sys def cal(a, b, op): if op == '+': return a + b elif op == '-': return a - b elif op == '*': return a * b elif op == '/': return a // b else: return b variables = dict() for line in sys.stdin.readlines(): line = line.strip() if line.startswith("let "): var, value = line[4:].replace(" ", "").split("=") res = re.match(r"[a-zA-Z_][a-zA-Z0-9_]*$", var) if not res: print("<syntax-error>") continue value = value.replace("+", " + ").replace("-", " - ").replace("*", " * ").replace("/", " / ") lst = value.split() ans, op = 0, None for ele in lst: if ele in "+-*/": op = ele elif ele.isdigit(): ans = cal(ans, int(ele), op) elif ele not in variables or variables[ele] == "<undefined>": ans = "<undefined>" break else: ans = cal(ans, variables[ele], op) variables[var] = ans elif line.startswith("out("): var = line[4:-1] if var not in variables or variables[var]=="<undefined>": print("<undefined>") elif variables[var] < -2147483648: print("<underflow>") elif variables[var] > 2147483647: print("<overflow>") else: print(variables[var])