华为2022秋招机试

第一题
数轴X上有两个点的序列A={A1,A2,…,Am}和B={B1,B2,…,Bn},A_i和B_i均为正整数,A、B已经从小到大排序,A、B一定不为空,给定一个距离R,列出同时满足如下条件的所有(Ai, Bj)数对:

  1. A_i <= B_j
  2. A_i 和B_j的距离小于等于R,但如果A_i找不到R范围内的B_j,则列出距离它最近的一个B_j当然这种情况要满足条件1,如果找不到,就抛弃A_i
    输入描述:
    按照人易读的格式输入一行数据,输入A和B已经排好序,A和B的大小不超过50, 正整数范围不超过65535
    输出描述:
    (A_i, B_j)数对序列,排列顺序满足序列中前面A_x <= A_y,前面的B_x <= B_y,因为输入的A和B已经排好序,所以实际输出结果不用特意排序,排序不是考察点。
    输入:
    A={1,3,5},B={2,4,6},R=1
    输出:
    (1,2)(3,4)(5,6)
ins = input()
splitIn = ins.split('}')

a = list(map(lambda x:int(x), splitIn[0][3:].split(',')))
b = list(map(lambda x:int(x), splitIn[1][4:].split(',')))
r = int(splitIn[2][3:])

ans = []
for i in a:
	j = 0
    # 保证满足条件1
    while(j < len(b) and b[j] < i): j+=1
    # 怕找不到 记录指针
    index = j
    # 开始找满足条件2的b元素值
    while(j < len(b) and b[j] - i <= r):
        ans.append([i, b[j]])
        j += 1
    if index == j and j < len(b): #说明没有找到
        ans.append([i, b[index]]) # 添加最近的元素
for k,v in ans:
    print("({0},{1})".format(k,v))

第二题
出差问题
考完发现好像是
leetcode1029

第三题
酒店房间号问题

最长公共子序列

你可能感兴趣的:(cpp基础,数据结构,算法)