我有个算法问题。我试图从一个更大的值集合中找到所有唯一的值子集。
例如,假设我有{1,3,7,9}
集。我能用什么算法找到3的这些子集?
{1,3,7} {1,3,9} {1,7,9} {3,7,9}
子集不应重复,且顺序不重要,因此集{1,2,3}与集{3,2,1}相同。鼓励使用Psudocode(或常规类型)。
for i = 0 to size for j = i + 1 to size for k = j + 1 to size subset[] = {set[i],set[j],set[k]}
一些使用递归的Java代码。
基本思想是尝试用当前位置交换每个元素,然后在下一个位置上递归(但我们还需要startpos
来指示我们交换的最后一个位置是什么,否则我们将得到一个简单的置换生成器)。一旦我们有足够的元素,我们打印所有这些并返回。
static void subsets(int[] arr, int pos, int depth, int startPos)
{
if (pos == depth)
{
for (int i = 0; i < depth; i++)
System.out.print(arr[i] + " ");
System.out.println();
return;
}
for (int i = startPos; i < arr.length; i++)
{
// optimization - not enough elements left
if (depth - pos + i > arr.length)
return;
// swap pos and i
int temp = arr[pos];
arr[pos] = arr[i];
arr[i] = temp;
subsets(arr, pos+1, depth, i+1);
// swap pos and i back - otherwise things just gets messed up
temp = arr[pos];
arr[pos] = arr[i];
arr[i] = temp;
}
}
public static void main(String[] args)
{
subsets(new int[]{1,3,7,9}, 0, 3, 0);
}
打印:
1 3 7
1 3 9
1 7 9
3 7 9
还要注意,在每一步,我们还原所有的交换。
假设我们输入了1、2、3、4、5
,我们想要找到大小为3的子集。
首先,我们使用前3个元素-1、2、3
。
现在,我们交换2
和4
以获得1 4 3 2 5
。但是我们希望跳过3
和2
,所以我们从5
开始。我们交换3
和5
,前3个元素给我们1 4 5
。
等等。
在这里跳过元素可能是最复杂的部分。请注意,每当我们跳过元素时,它只涉及从我们交换的位置之后继续(当我们交换2
和4
时,我们从4
之后继续)。这是正确的,因为没有经过处理的元素不可能到达我们交换的位置的左边,也没有经过处理的元素到达那个位置的右边,因为我们从左到右处理所有的元素。
从for循环的角度来考虑算法可能是最简单的。
for i = 0 to size
for j = i + 1 to size
for k = j + 1 to size
subset[] = {set[i],set[j],set[k]}
每个递归步骤都表示一个for循环。
startpos
分别为0
、i+1
和j+1
。
问题内容: 我有这个桌子; 我希望选择这样的行: 任一或= 。 另一个字段应该是唯一的。 即我想从表中选择唯一,或者我需要以下结果: 怎么做? 为什么?因为我希望构建一个类似于Facebook的收件箱,在该收件箱中,已发送和已接收的消息将被聚合,而此查询是迄今为止的瓶颈。 我正在使用Rails 3.2和Postgres 9.3。 问题答案: (not )从结果中删除重复项,从而不必要。您可能希望在
我有一个包含以下列的表:id、col1、col2、col3、col4、col5、col6。 约束表示至少有3列被填充(所以最多3个NULs)。(列不按顺序填充,所以可以有col1、col2、col5被填充,col3、col4、col6是NULs) 如何确保当该列不为NULL时,它在此行的其他列中是唯一的?如何确保非空值的组合在所有行中都是唯一的? 我目前添加了以下约束(以确保至少3个非空):
我有以下格式的配子数据: 数据输出: 我需要对它们进行配对和组合,所以我参考一对中的位置得到所有可能的唯一组合。我有另一个数据文件,其中包含对的信息,它们是参考Place配对的。所以在这个文件中,我可以看到Place 19 Place 33是一对,我想要以下结果: 在这种情况下,“唯一”表示A1:A2等于A2:A1。我之所以想这样做,是因为我想对这对字母进行四配子测试,看看是否所有可能的字母组合都
问题内容: 在处理从YQL返回的JSON时,我发现自己正在寻找一种从数组中提取所有唯一值的方法。 代码看起来有点“忙”,我想知道是否有更优雅的方法从数组中提取唯一值。 问题答案: 您可以使用indexOf来检查元素是否在数组中。 或者如果您具有唯一的ID或名称,则使用对象而不是数组:var output = {}
我正在使用LinkedHashSet从ArrayList中获取所有唯一值。 我的代码如下所示:
问题内容: 在最近的一次采访中有人问我这个问题。 您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。 我的做法是要经过在整个数组循环,然后创建一个索引作为数组中和的数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。 我说我的方法会花费时间。面试官告诉我要以低于复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整