【发布时间】:2017-09-24 08:27:05
【问题描述】:
在这个问题中,我有许多查询,我必须在 array 中输出 integers 的计数,该计数可被 k 整除(其中一个查询)。array 包含重复的元素。我正在尝试优化问题,我的方法如下:
代码:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] ar={2,4,6,9,11,34,654,23,32,54,76,21432,32543,435,43543,643,2646,4567,457654,75,754,7,567865,8765877,53,2};
int query=sc.nextInt();
int length=ar.length;
int count=0;
for (int i=0;i<query ;i++ ) {
int x=sc.nextInt();
for (int j=0;j<length ;j++ ) {
if(ar[j]>x){
if(ar[j]%x==0){
count++;
}
}
}
System.out.println("Count:"+count);
}
}
上面的代码给出了正确的输出,但复杂度是O(query*length),如果数组大小更大,程序会timeout。
谁能帮我优化问题?
【问题讨论】:
-
您可以将
ar数组分成三个较小的数组:一个是素数,一个是小非素数,一个是大非素数。对于素数,您不必检查模余数。一个等于素数的数不能等于另一个素数。根据x的大小,可以跳过小数组数字。 -
这是来自任何编码平台(如hackerank 或leetcode)的问题吗?如果是,您能否提供问题的链接以验证测试用例?
-
好的,我试试
-
@CodeHunter,这是来自编码平台hackerearth的问题,但没有显示任何测试用例。
-
数组的最大长度是多少?该数组中元素的最大值是多少?
标签: java arrays algorithm performance optimization