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

给定每个元素计数的数组有多少可除性

章高朗
2023-03-14

我有一个数字列表,现在我想从列表中取一个数字,并检查有多少个元素可以将这个数字与余数除以0。

这是我的代码:

public static void countDivibilies(List<Integer> list) {
    for (int i = 0; i < list.size(); i++) {
        int e = list.get(i);
        int count = 0;
        for (int j = 0; j < list.size(); j++) {
            int k = list.get(j);
            if (e % k == 0) {
                count++;
            }
        }
        System.out.println(e + " : " + count);
    }
}

对于示例输入:

2, 4, 8, 2

输出是:

2 : 2
4 : 3
8 : 4
2 : 2

但是此代码以 O(n2 的时间复杂度运行。但是我的输入列表大小范围最大为 10 5,每个元素也在 1 到 105 之间。那么如何提高这个程序的时间复杂度呢?

共有1个答案

康赞
2023-03-14
  1. ListO(N)时间内创建频率Map
  2. O(sqrt(N))时间内计算List每个元素的除数。使用频率Map查找元素在List中有多少个除数。总时间复杂度为O(Nsqrt(N))
public static void countDivibilies(List<Integer> list) {
    Map<Integer, Integer> freq = list.stream()
       .collect(Collectors.toMap(x -> x, x -> 1, Integer::sum));
    for(int x : list){
        int count = 0;
        for(int i = 1; i * i <= x; i++){
            if(x % i == 0) {
                count += freq.getOrDefault(i, 0);
                if(x / i != i) //don't overcount square root
                   count += freq.getOrDefault(x / i, 0);
            }
        }
        System.out.println(x + " : " + count);
    }
}
 类似资料:
  • 当我在一次编码竞赛中解决一个问题时,我发现我需要这样做:给定表示子数组索引的对对于每个元素,计算包含它的子数组的数量。例如: 我们有一个数组<code>[7,-2,-7,0,6],对是<code<(0,2)、(1,4)、(2,3)、(0,3)</code>,那么结果数组将是<code>[2,3,4,3,1],因为第一个元素在子数组<code>(0,2),</code>(0,3)中,第二个元素在<c

  • 问题内容: 例如,存储一百万个(32位)整数列表需要多少内存? 问题答案: 有用的链接: 如何获取python对象的内存大小/用法 python对象的内存大小? 如果将数据放入字典中,我们如何计算数据大小? 但是,他们没有给出明确的答案。要走的路: 使用/不使用列表来测量Python解释器消耗的内存(使用OS工具)。 使用第三方扩展模块,该模块定义某种sizeof(PyObject)。 更新 :

  • 问题内容: 我编写了以下代码段来计算每个元素的出现次数。有可能以更短的方式实现这一目标吗? 另外,我只想显示出现1次以上的元素。所以我尝试如下修改,这导致了错误。 正确的方法是什么? 问题答案: 对于后一个问题,您必须进行更改 至 对于第一部分,尚不清楚为什么需要第一条管道,然后需要第二条管道。如果目的是将转换为,请使用: 正如Dici所建议的,您还可以将Collectors链接起来,将每个数字与

  • https://www.geeksforgeeks.org/count-of-larger-elements-on-right-side-of-each-element-in-an-array/#:~: text=朴素的做法:最简单的做法,一边然后打印出来。 我试图以大于左边数字的顺序计算数字,就像上面网站上描述的那样,但网站中的输出是arraylist,但我只想要一个数字,它是arraylist

  • 问题内容: 我如何计算数组中有多少个对象? 数组看起来像: 我假设如果是PHP,我可以使用count(),但是NodeJS / Javascript呢? 编辑: 它怎么会读“价值X票”,而不能读另一部分? 问题答案: 用 更新 ,在您的编辑中,我看到 是,确保对象具有属性(应为数组);