【问题标题】:Verifying is an array is a subset of another验证一个数组是否是另一个数组的子集
【发布时间】:2017-05-07 09:30:29
【问题描述】:

这是一个热门问题,但我找不到满足我情况的答案。

我有布尔数组,我试图在其中查看一个数组是否是另一个数组的子集。

示例:

const int size = 10;
bool arr1[size];
bool arr2[size];
bool arr3[size];

assume the arrays have been initialized to false except for the following:

arr1 4,5,6 = true
arr2 0 = true
arr3 4,5 = true

在此示例中,arr2 不是两者的子集,但 arr3arr1 的子集。

我已经尝试了一些从布尔值的真实值创建整数数组的混乱尝试,但我仍然不确定如何验证它们是否是彼此的序列(即子集)。

我尝试使用这个算法

int size = 10;
for (int i = 0; i<size; i++)
{
    for (int j = 0; j<size; j++)
    {
       if(arr2[i] == arr1[j])
          break;
    }
    if (j == size)
       return false;
}
return true;
}

这个也不行。

目标是确定一个数组是否包含另一个数组的所有元素。 在这种情况下,arr3 的索引 4 和 5 为 true,arr1 中也是如此

但如果我将 arr2 与超集 arr1 进行比较,它将返回 false,因为 arr1[0] 不正确。

【问题讨论】:

  • 未初始化的值越界访问数组 -> 未定义行为的两个原因
  • 利用std::includes
  • 您似乎对什么是“子集”有一些特殊的理解。严格来说,如果两个集合具有相同数量的元素,那么如果它们包含完全相同的元素,那么一个集合只能是另一个集合的子集。 (实际上,严格来说,一个集合没有两次包含任何元素)
  • 因为,您没有为索引为 0-3、7-9 的 arr1 元素、索引为 1-9 的 arr2 元素和索引为 0-4 的 arr3 元素分配任何值, 7-9,遍历列表并检查每个值是没有意义的 - 因为这些元素将具有不确定的值。
  • 请定义您所说的“子集”是什么意思,因为标准定义不适合。恰好有 4 个不同的集合带有布尔元素,因此找到它们的所有(标准)子集没有问题。

标签: c++ arrays subset


【解决方案1】:

下面是检查数组a是否具有trueb中的所有索引true的函数,这里ab大小相同。

bool checkArrays(bool a[], bool b[], int n) {
    for(int i=0; i<n; i++) {
        if(b[i] && b[i] != a[i]) // compare only if b[i] is true
            return false;
    }
    return true;
}

【讨论】:

  • 这确实是我要找的!非常感谢。
猜你喜欢
  • 2012-08-29
  • 2010-09-24
  • 2013-06-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多