You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找出多数组中仅含唯一元素的数组?设计低时间复杂度高效方案

在多个数组中找出仅含全局唯一元素的数组

问题定义

我们需要找到这样的数组:该数组中的每一个元素都没有在其他任何输入数组中出现过。如果不存在这样的数组,返回None。


常规解法

步骤

  1. 统计全局元素出现次数:遍历所有数组,用哈希表记录每个元素在所有数组中的总出现次数。
  2. 逐一验证数组:对每个数组,检查其所有元素的出现次数是否均为1(说明该元素仅在当前数组中出现)。
  3. 返回结果:找到第一个符合条件的数组返回其名称;若没有符合条件的数组,返回None。

代码实现(Python)

def find_unique_element_array(arrays):
    # 统计所有元素的出现次数
    element_count = {}
    for arr in arrays.values():
        for num in arr:
            element_count[num] = element_count.get(num, 0) + 1
    
    # 检查每个数组是否符合要求
    for arr_name, arr in arrays.items():
        is_valid = True
        for num in arr:
            if element_count[num] != 1:
                is_valid = False
                break
        if is_valid:
            return arr_name
    return "None"

# 示例1测试
test_arrays1 = {
    "array1": [1,2,3,4],
    "array2": [1,2],
    "array3": [3],
    "array4": [5,6]
}
print(find_unique_element_array(test_arrays1))  # 输出: array4

# 示例2测试
test_arrays2 = {
    "array1": [1,2,3,4],
    "array2": [1,2],
    "array3": [3,5],
    "array4": [5,6]
}
print(find_unique_element_array(test_arrays2))  # 输出: None

高效优化方案

常规解法已经是线性时间复杂度,但我们可以通过优化元素信息的存储,减少后续验证的冗余操作:

优化思路

  1. 记录元素的归属与出现次数:用一个哈希表同时存储每个元素的出现次数,以及它首次出现的数组名称。如果元素在多个数组中出现,直接将归属标记为None。
  2. 快速验证数组:验证数组时,只需检查每个元素的出现次数为1,且归属就是当前数组即可。一旦发现不符合的元素,立即终止当前数组的验证。

代码实现(Python)

def find_unique_element_array_optimized(arrays):
    element_info = {}  # 键:元素,值:(出现次数, 首次归属数组名)
    
    # 遍历所有数组,收集元素信息
    for arr_name, arr in arrays.items():
        for num in arr:
            if num not in element_info:
                element_info[num] = (1, arr_name)
            else:
                # 元素在其他数组出现过,更新次数并标记归属为None
                current_count, _ = element_info[num]
                element_info[num] = (current_count + 1, None)
    
    # 验证每个数组
    for arr_name, arr in arrays.items():
        valid = True
        for num in arr:
            count, owner = element_info[num]
            if count != 1 or owner != arr_name:
                valid = False
                break
        if valid:
            return arr_name
    return "None"

# 测试示例1
print(find_unique_element_array_optimized(test_arrays1))  # 输出: array4
# 测试示例2
print(find_unique_element_array_optimized(test_arrays2))  # 输出: None

复杂度分析

两种解法的时间复杂度均为O(N)(N为所有数组的元素总数),每个元素仅被遍历两次。空间复杂度为O(M)(M为不同元素的数量),用于存储元素的统计信息。

高效解法的优势在于:统计阶段直接标记跨数组出现的元素,验证阶段可以提前终止不符合条件的数组检查,减少了不必要的计算。


内容的提问来源于stack exchange,提问作者JIJIKO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:10:41