2013-06-04 118 views
-3

尽可能地优化这个函数(尽量减少空间和时间复杂度)。如何减少下面代码的时间和空间复杂度

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()); 
      } 
     } 
    } 
+0

那么这里只有一个str,所以你可以把for循环放在一个str if块中,for不会运行,除非str等于定义的字符串 – JRowan

+0

这与android有什么关系? – SimonC

回答

3

看起来像功课,但我会咬。下面是我...

  • str.equals(local)可以外循环来计算(并可能阻止你进入循环的话)
  • 可以存储arr[i]值来阻止它正在抬头 多次
  • 为什么当你只是在数学上做一个整数?
  • in *= 2理论上比in = in * 2更快(或者i如果你杀了in如上)
  • 既然你曾经使用过的所有是arr[i] * 2,计算出一次,在if使用它,以及输出。 (根本不需要in=in*2in*=2
  • 将输出缓冲起来,并在 循环结束时只输出一个语句。
+0

''左移'与'* 2'相同# –

+0

@SteveKuo true。甚至可能会更快(我没有去过JVM规范中的那个级别)。我不这样做,因为a)我认为它使得代码更不可读/明显,并且b)“i = i * 2”,“i * = 2”和“i << 2”之间的差异并不常见在现实世界中的事情;-) – John3136

+0

我看不出这些如何改变任何事情的复杂性。 –