Python实现【找出两个整数数组中同时出现的整数】


from collections import defaultdict
import sys

def solve():
    # 读取输入
    arr1 = list(map(int, sys.stdin.readline().strip().split(',')))
    arr2 = list(map(int, sys.stdin.readline().strip().split(',')))

    # 统计频率
    freq1 = defaultdict(int)
    for num in arr1:
        freq1[num] += 1

    freq2 = defaultdict(int)
    for num in arr2:
        freq2[num] += 1

    # 找出共同整数
    common_nums = set(freq1.keys()) & set(freq2.keys())

    if not common_nums:
        print("NULL")
        return

    # 计算共同出现次数并分类
    count_to_nums = defaultdict(list)
    for num in common_nums:
        count = min(freq1[num], freq2[num])
        count_to_nums[count].append(num)

    # 按共同出现次数排序
    sorted_counts = sorted(count_to_nums.keys())

    # 生成输出
    for count in sorted_counts:
        nums_sorted = sorted(count_to_nums[count])
        print(f"{count}:{','.join(map(str, nums_sorted))}")

solve()

解决步骤

1、读取输入:从标准输入读取两行,分别代表两个数组。

2、解析数组:将每行字符串按逗号分割,转换为整数列表。

3、统计频率:分别统计两个数组中每个整数的出现频率(可以使用字典或哈希表)。

4、找出共同整数:遍历其中一个数组的频率字典,检查整数是否在另一个数组的频率字典中。

5、计算共同出现次数:对于每个共同整数,取两个数组中该整数出现次数的最小值。

6、分类和排序:

  • 创建一个字典,键是共同出现次数,值是该次数下的整数列表。
  • 将共同整数按照共同出现次数分类。
  • 对字典的键(共同出现次数)进行排序。
  • 对每个共同出现次数下的整数列表进行升序排序。

7、生成输出:

  • 如果没有共同整数,输出“NULL”。
  • 否则,按照“出现次数:整数列表”的格式输出,整数列表以逗号分隔。


相关文章

Python算法:4.寻找两个正序数组的中位数

题目:寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log(m+n...

在Python中怎么用二分法插入一个新的数到数组列表

接昨天的把一个数插入到有序的数组、列表中,我们今天使用二分法来,就好比一个队分成2个队,因为有序的么,先比较中间的,得到结果,只要比较一个方向的一半就可以了,这样一来是不是减少一半的时间,节约是运行时...

Python实现【分割数组的最大差值】

n = int(input()) nums = list(map(int, input().split())) total_sum = sum(nums) max_diff = 0 left_sum...

Python实现分治算法?

分治算法(Divide and Conquer Algorithm)是一种设计算法的策略,它将一个问题分成多个相似的子问题,递归地解决这些子问题,然后将结果合并以得到原问题的解。典型的分治算法包括归并...

【找出两个整数数组中同时出现的整数】Python实现

from collections import Counter def find_common_elements(arr1, arr2): # 统计数组中每个数字的出现次数 coun...