OD 算法题 B卷【找出两个整数数组中同时出现的整数】

文章目录

  • 找出两个整数数组中同时出现的整数

找出两个整数数组中同时出现的整数

  • 有两个整数数组,找出两个数组中同时出现的整数,并按照要求输出;
  • 有同时出现的整数时,先按照同时出现的(最少)次数进行分类,然后按照出现次数从小到大依次按行输出;
  • 没有同时出现的整数时,输出NULL

输入描述:
第一行输入第一个数组;
第二行输入第二个数组;
输出描述:
按照出现次数升序排序输出;
出现次数:该出现次数下的整数升序排序;

示例1
输入:
5,3,6,-8,0,11
2,8,8,8,-1,15
输出:
NULL

示例2
输入:
5,8,11,3,6,8,8,-1,11,2,11,11
11,2,11,8,6,8,8,-1,8,15,3,-9,11
输出:
1:-1,2,3,6
3:8,11

python实现

  • 字典数据结构存储统计结果;
  • 排序;

arr1 = list(map(int, input().strip().split(",")))
arr2 = list(map(int, input().strip().split(",")))

# 统计每个数组中每个整数的出现次数
arr1_count = {}
for i in arr1:
    if i in arr1_count:
        arr1_count[i] += 1
    else:
        arr1_count[i] = 1

arr2_count = {}
for i in arr2:
    if i in arr2_count:
        arr2_count[i] += 1
    else:
        arr2_count[i] = 1

result = {}
for v1 in arr1:
    if v1 not in arr2:  # 非公共整数,跳过
        continue

    # 公共整数,取同时出现的最少次数
    common_times = min(arr1_count.get(v1), arr2_count.get(v1))
    if common_times not in result:
        result[common_times] = [v1]
    else:
        if v1 not in result[common_times]:
            result[common_times].append(v1)


# 排序输出
if not result:
    print("NULL")
else:
    for k in sorted(result.keys()):
        print(f"{k}:{','.join([str(i) for i in sorted(result.get(k))])}")
        

你可能感兴趣的:(OD算法题,B卷,逻辑分析,数据结构)