【发布时间】: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 不是两者的子集,但 arr3 是 arr1 的子集。
我已经尝试了一些从布尔值的真实值创建整数数组的混乱尝试,但我仍然不确定如何验证它们是否是彼此的序列(即子集)。
我尝试使用这个算法
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] 不正确。
【问题讨论】:
-
未初始化的值和越界访问数组 -> 未定义行为的两个原因
-
您似乎对什么是“子集”有一些特殊的理解。严格来说,如果两个集合具有相同数量的元素,那么如果它们包含完全相同的元素,那么一个集合只能是另一个集合的子集。 (实际上,严格来说,一个集合没有两次包含任何元素)
-
因为,您没有为索引为 0-3、7-9 的
arr1元素、索引为 1-9 的arr2元素和索引为 0-4 的arr3元素分配任何值, 7-9,遍历列表并检查每个值是没有意义的 - 因为这些元素将具有不确定的值。 -
请定义您所说的“子集”是什么意思,因为标准定义不适合。恰好有 4 个不同的集合带有布尔元素,因此找到它们的所有(标准)子集没有问题。