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

计算满足min(子集)max(子集)

吴升
2023-03-14

在一次采访中被问及这个问题,没有比生成所有可能的子集更好的答案了。例子:

a = [4,2,5,7] k = 8

output = 4

[2],[4,2],[2,5],[4,2,5]

采访者试图暗示对数组进行排序应该会有所帮助,但我仍然无法找到比暴力更好的解决方案。非常感谢您的意见。

共有2个答案

郭意
2023-03-14
  1. 对数组进行排序
  2. 对于indexl处的元素x,对数组进行二进制搜索以获取数组中最大整数的索引,即

这应该适用于复杂度为0(N*log(N))的情况,足以回答面试问题。

对于给定的示例,排序数组=[2,4,5,7]

  1. 对于元素2l=0r=2。Count=2^(2-0) = 4(涵盖[2],[4,2],[2,5],[4,2,5]
  2. 对于元素4l=1r=0。Count=0,我们打破了迭代。
王佐
2023-03-14

采访者暗示,对数组进行排序会有帮助,而且确实有帮助。我会尽力解释的。

获取您声明的数组和k值:

a = [4,2,5,7]
k = 8

对数组进行排序将产生:

a_sort = [2,4,5,7]

现在我们可以考虑以下过程:

>

  • 集合ii=0,jj=1

    选择a_sort[ii]作为子集的一部分

    2.1.如果<代码>2*a_sort[ii]

    将a_排序[ii jj]添加到子集

    3.1. Ifa_排序[ii]a_排序[ii jj]

    3.1.1. 子集[a_sort[ii]、a_sort[ii jj]持有条件,是解的一部分,以及由任何额外数量的元素组成的任何子集,其中a_sort[kk]

    3.1.2。设置jj=1并返回步骤3。

    3.2. 否则,设置ii=1,jj=ii 1,返回步骤2

    根据您的输入,此过程应返回:

    [[2], [2,4],[2,5],[2,4,5]]
    # [2,7] results in 9 > 8 and therefore you move to [4]
    # Note that for [4] subset you get 8 = 8 which is not smaller than 8, we are done
    
    • 如果你有一个子集[a\u sort[ii]],它不包含2*a\u sort[ii]

    如果您只是想得到可能的子集,这比生成子集本身更容易。

    假设对于ii

    看看上面的例子:

    • [2]增加1个计数
    • [2,4]添加1个计数(1=0 1
    • [2,5]添加2个计数(2=0 2--

    总数为4

  •  类似资料:
    • 给定一组元素,如何在此列表的所有子集中找到MAX和MIN之间的差异。 例如: 集合=1 2 3

    • 我尝试使用jitsi meet在raspberry上进行视频会议。首先,我使用https://meet.jit.si/创建一个房间并从我的raspberry pi 3板连接到该房间。我有一个picam camera v1插件到pi板和一个外部usb扬声器。其次,我使用chromium浏览器从raspberry加入会议,预览视频看起来不错。在那之后,我使用chrome浏览器从我的电脑加入了那个房间,

    • 在这个例子中,我们设置整数的最小和最大数字以及数字的小数部分。 IOTester.java import java.text.NumberFormat; import java.util.Locale; public class I18NTester { public static void main(String[] args) { Locale enLocale = new

    • 问题内容: 我想找到一组整数的子集。这是具有回溯功能的“子集总和”算法的第一步。我已经编写了以下代码,但是没有返回正确的答案: 例如,如果我要计算set = {1,3,5}的子集,则我的方法的结果是: 我希望它产生: 我认为问题出在零件list.removeAll(list);中。但我不知道如何纠正它。 问题答案: 你想要的就是Powerset。这是一个简单的实现: 我将为你提供一个示例,说明该算

    • 我有一个这样的数据框 我想把这些数据子集,得到美国、中国和印度这些年的国内生产总值。另一个问题是,假设我每年有200个国家的国内生产总值数据,而我只对50个国家感兴趣。如何子集数据?非常感谢!

    • 如果输入的len()少于10个字符,则调用子函数“tester”的默认值“太短”。 我下面的代码在一定程度上有效。我需要帮助,这样用户可以一次又一次地输入,直到他们键入'quit',在该命令终止时,终端中没有给出任何输出。传接球不起作用,我不知道该在哪里Rest。 我尝试了一段时间,真的,有回报,但我不能再跟随了。