Мы можем сделать две вещи:
Мы можем дать вам ответ, и этот ответ будет O(N^2)
.
Мы можемОбъясните, как это сделать для себя.
Способ сделать это - посчитать операции.
Когда я говорю «считать», я нев буквальном смысле.На самом деле я имею в виду, что вам нужно разработать алгебраическую формулу для того, сколько раз показательная операция выполняется.
Итак, в вашем примере я бы назвал эти два утверждения наиболее важными:
sumLeft= sumLeft + arr[i];
sumRight= sumRight + arr[i];
(Почему я выбрал эти утверждения? Интуиция / опыт! * педантичный способ сделать это - подсчитать все операций. Но с опытом вы можете выбрать важные ... а остальные не имеют значения.)
Итактеперь для формул:
За одну итерацию внешнего цикла первый оператор выполняется из 0 to num-1
;то есть num
раз.
За одну итерацию внешнего цикла второй оператор выполняется из num+1 to array.length - 1
;то есть array.length - num - 1
раз.
Таким образом, за одну итерацию внешнего цикла два оператора выполняются num + array.length - num - 1
раз, что сокращается до array.length - 1
раз.
Но внешний цикл запускается array.length
раз.Таким образом, два оператора выполняются array.length x (array.length - 1)
раз.
Наконец, по определению Big Oh, array.length x (array.length - 1)
находится в классе сложности O(N^2)
, где N
- массивразмер.