algorithm - 使用位操作编程问题查找子序列
问题描述
如何找到解决子序列和子集问题的方法,例如找到满足特定条件的数组的子序列或子集,应该使用位操作来解决,以及可以将其降低到的最佳时间复杂度是多少。这些天我开始练习很多编码问题。
需要一点帮助。我期望应该遵循一些适当的方法来解决这类问题。
解决方案
从 0 数到 (2 set.size()
- 1)(含)。检索当前计数中对应于 1 位的元素。当然,必须对集合进行排序以按索引检索元素。
唯一棘手的部分是提取与当前计数中的 1 位对应的元素。这是一种方法的伪代码:
for (int pos = 0, mask = 1; mask <= currentCount; mask <<= 1; ++pos) {
if ((currentCount & mask) != 0) {
include element at pos in the current subset
}
}
请注意,这假定原始集大小不超过用于计数和掩码的任何整数类型的可用位数。
Java 中的实现将如下所示:
private static void findSubsets(int array[]) {
int numOfSubsets = 1 << array.length;
for (int i = 0; i < numOfSubsets; i++) {
int pos = array.length - 1;
int bitmask = i;
System.out.print("{");
while (bitmask > 0) {
if ((bitmask & 1) == 1)
System.out.print(array[pos] + ",");
bitmask >>= 1;
pos--;
}
System.out.print("}");
}
}
推荐阅读
- crystal-lang - Crystal 中的 Web 抓取库
- vba - 防止用户窗体切换工作表
- c# -
在服务器上上传代码时不起作用 - java - 如何在运行时更改属性文件和刷新配置类?
- java - Spring蛇案例和验证错误响应
- python - jupyder notebook: OSError: [Errno 2] "dot" not found in path
- sas - SAS PROC SQL - 如何将字符串转换为数字
- php - Ajax 无法使用 GET 向 php 发送数据
- amazon-web-services - 在 Glue 作业中创建 Glue 数据目录表
- entity-framework-core - 即使属性类型不可为空,是否可以将数据库列配置为允许 NULL?