2013-06-04 5 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

Ну, есть только одна строка, поэтому вы можете поместить цикл for в str, если блок и не будет работать, если строка не будет равна заданной строке – JRowan

+0

Как это связано с Android? – SimonC

ответ

3

Похоже, домашнее задание, но я буду укусить. Вот что я получил ...

  • str.equals(local) можно вычислить вне цикла (и может остановить вас войти в петлю на все)
  • Вы можете сохранить значение arr[i], чтобы остановить его просматриваемое несколько раз
  • Зачем создавать Integer из i, когда вы просто занимаетесь математикой?
  • in *= 2 теоретически быстрее, чем in = in * 2 (или i если вы убьете in, как указано выше)
  • Поскольку все, что вы когда-либо использовать это arr[i] * 2, посчитать, что один раз и использовать его в if, а также на выходе. (нет необходимости в in=in*2 или in*=2 вообще)
  • Буфер вверх и только один оператор вывода в конце цикл.
+0

'in' left shift - это то же самое, что и' * 2' –

+0

@SteveKuo true. Может быть даже быстрее (я не дошел до этого уровня в спецификациях JVM). Я не делаю этого, потому что: а) я думаю, что он делает код менее читабельным/очевидным и б) разница между 'i = i * 2',' i * = 2' и 'i << 2' не часто материя в реальном мире ;-) – John3136

+0

Я не вижу, как любое из этих изменений усложняет что-либо. –

Смежные вопросы