Java 如何降低以下代码的时间和空间复杂性
尽可能优化(减少空间和时间复杂性)此功能Java 如何降低以下代码的时间和空间复杂性,java,time-complexity,space-complexity,Java,Time Complexity,Space Complexity,尽可能优化(减少空间和时间复杂性)此功能 public void q1(String str, int[] arr) { String local = "findnumber"; for(int i=0; i<arr.length; i++) { if(str.equals(local) && arr[i] * 2 > 10) {
public void q1(String str, int[] arr)
{
String local = "findnumber";
for(int i=0; i<arr.length; i++)
{
if(str.equals(local) && arr[i] * 2 > 10)
{
Integer in = new Integer(arr[i]);
in = in * 2;
System.out.print(in.toString());
}
}
}
public void q1(字符串str,int[]arr)
{
字符串local=“findnumber”;
对于(int i=0;i 10)
{
整数in=新整数(arr[i]);
in=in*2;
System.out.print(in.toString());
}
}
}
看起来像是家庭作业,但我要咬一口。这是我得到的
可以在循环外计算(可能会阻止您进入循环)str.equals(local)
- 您可以存储
的值以停止查找 多次arr[i]
- 当你在做数学运算时,为什么要从i中创建一个整数呢
理论上比in*=2
快(或in=in*2
如果你像上面那样在i
中杀死
)
- 由于您所使用的是
,因此请计算一次,并在arr[i]*2
以及输出中使用它。(根本不需要if
或in=in*2
)in*=2
- 缓冲输出,在输出的末尾只有一个output语句 循环
左移与*2
@SteveKuo true相同。甚至可能更快(我在JVM规范中没有达到这个级别)。我之所以不这样做,是因为a)我认为这会降低代码的可读性/明显性,b)前两个代码大致相同,I*=I*2
,I*=2
和iI之间的差异,但我看不出这些都会如何改变任何事情的复杂性。@R.martinhofernande