文章目录
2022/9/21 华为留学生
题目2 两数之和
m = int(input())
x = list(map(int, input().split(' ')))
s = int(input())
y = list(map(int, input().split(' ')))
def func(m, x, s, y):
cnt = 0
hashmap = dict()
for i in range(m):
for j in range(s):
if y[j] - x[i] in hashmap:
cnt += 1
hashmap[x[i]] = i
return cnt
print(func(m,x,s,y))
"""
8
1 2 3 5 7 9 10 12
2
4 12
"""
题目3 拓扑排序
#华为9.21 第三题拓扑排序
from collections import deque
n, r = map(int, input().split())
nums = list(map(int, input().split()))
indegre = {}
nxs = {}
for num in nums:
indegre[num] = 0
nxs[num] = []
for i in range(r):
a, b = map(int, input().split())
indegre[b] += 1
nxs[a].append(b)
rest = []
class Solution:
def bfs(self, nums, indegre, nxs, rest):
queue = deque()
for num in nums:
if indegre[num] == 0 and len(nxs[num]) != 0:
queue.append(num)
nxs[num].sort()
if indegre[num] == 0 and len(nxs[num]) == 0:
rest.append(num)
#拓扑排序
res = []
while len(queue):
curr = queue.popleft()
res.append(curr)
for nx in nxs[curr]:
indegre[nx] -= 1
if indegre[nx] == 0: queue.append(nx)
#处理rest
for num in rest:
if indegre[num] == 0 and len(nxs[num]) == 0:
if num <= res[0]:
res = [num] + res
elif num >= res[-1]:
res = res + [num]
else:
for i in range(1,len(res)-1):
if res[i] <= num and num <= res[i+1]:
res = res[:i+1] + [num] + res[i+1:]
break
#输出
if len(res) == 0: print(-1)
else:
for i in range(len(res)-1):
print(res[i], end = ' ')
print(res[-1])
a = Solution()
a.bfs(nums,indegre,nxs,rest)
"""
6 5
0 1 2 3 4 5
0 1
1 2
1 3
2 3
3 4
"""