当前位置: 首页 > 知识库问答 >
问题:

找到子集和,得到顶部的z元素

邓英卓
2023-03-14

我有一个数字数组,现在我想找到所有可能的子集和,并得到其中的顶部z元素

例子:

Input : arr[] = {2, 4, 5}, z = 3
SubsetSums : 0 2 4 5 6 7 9 11
output : Top z=3 elements = 11,9,7

这是我的代码:

static List<Long> subsetSums(int arr[], int n)
    {
 
        // There are total 2^n subsets
        int total = 1 << n;
        List<Long> list = new ArrayList<>(); 
        // Consider all numbers from 0 to 2^n - 1
        for (int i = 0; i < total; i++) {
            int sum = 0;
 
            // Consider binary representation of
            // current i to decide which elements
            // to pick.
            for (int j = 0; j < n; j++)
                if ((i & (1 << j)) != 0)
                    sum += arr[j];
 
            // Print sum of picked elements.
            System.out.print(sum + " ");
            list.add(sum);
        }
        list.sort((a,b) -> b.compareTo(a));
        List<Long> response = new ArrayList<>();
        for(int i=0; i<k && i<list.size(); i++) {
           response.add(list.get(i));  
        }
        return response;
    }

我从[this][1]帖子中获取了部分代码。

这个程序的时间复杂度是O(n*2^2)

我在一次Hackerrank考试中使用过这个,但在15个测试用例中,只有7个通过了测试,其余的都超时了,因为输入大小n可能非常大。

如何以较低的时间复杂度解决这个问题?[1]: https://www.geeksforgeeks.org/print-sums-subsets-given-set/

共有1个答案

红明德
2023-03-14

如果首先对输入数组进行排序,则不必计算所有这些和:

  • 最大的总和是所有值的总和

zn^2小得多时,这将大大加快解决方案的速度。

 类似资料:
  • 有没有一种算法可以高效地找到这个中心?理想情况下,性能只取决于及其周围环境,而不取决于整个图。 我考虑过从中的所有顶点同时开始广度优先搜索,当所有遇到一个顶点时停止搜索,但这并不是太高效。在这种情况下可能是可行的,但感觉可能有更好的方法。

  • 这是一个算法问题。如果我错过了Python中任何有帮助的现有函数,请大喊一声。 给定一组元素的,我们可以在Python中使用函数来找到所有唯一的k元素子集。让我们调用包含所有这些子集的集合。请注意,每个这样的子集都有不同的元素。 问题是两步走。首先,给定这些k-不同元素子集,我想组合(其中的一些),这样(组合只是一些子集的超集): > 构图中任意两个子集之间的交集为空 构图中所有子集的并集给出的正

  • 我试图从html代码中获取子元素(卡号),其中html标记和类名相同。下面是html代码片段 下面是我尝试的标识符。但都返回了第一个卡号 "************4305”。 尝试了其他选项:这也返回了第一个卡号“************4305”。

  • 返回页面顶部的操作按钮 基础用法 滑动页面即可看到右下方的按钮。 demo <template> Scroll down to see the bottom-right button. <el-backtop target=".page-component__scroll .el-scrollbar__wrap"></el-backtop> </template> 自定义显示内容 显示区

  • Backtop 回到顶部 返回页面顶部的操作按钮 基础用法 滑动页面即可看到右下方的按钮。 demo <template> Scroll down to see the bottom-right button. <el-backtop target=".page-component__scroll .el-scrollbar__wrap"></el-backtop> </template>

  • 平滑滚动到页面顶部。 使用 document.documentElement.scrollTop 或 document.body.scrollTop 获取到顶部距离。从顶部滚动一小部分距离。使用window.requestAnimationFrame() 来实现滚动动画。 const scrollToTop = () => { const c = document.documentElemen