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语句 循环

只有一个str,因此您可以将for循环放入str if块中,除非str等于定义的字符串,否则for不会运行。这与android有什么关系?中的
左移与
*2
@SteveKuo true相同。甚至可能更快(我在JVM规范中没有达到这个级别)。我之所以不这样做,是因为a)我认为这会降低代码的可读性/明显性,b)前两个代码大致相同,
I*=I*2
I*=2
iI之间的差异,但我看不出这些都会如何改变任何事情的复杂性。@R.martinhofernande