Я изучаю тест и нашел этот вопрос:
Я не могу определить сложность, я понял, что это O (n 2) или O (n 3), и я склоняюсь к O (n 3).
Может кто-нибудь сказать мне, что это такое и почему?
Моя идея, что это O (n 2), заключается в том, что в цикле j
j = i
, который дает форму треугольника, а затем цикл k
идет от i + 1
до j
, который, я думаю, является другой половиной треугольника.
public static int what(int[] arr)
{
int m = arr[0];
for (int i=0; i<arr.length; i++)
{
for (int j=i; j<arr.length;j++)
{
int s = arr[i];
for (int k=i+1; k<=j; k++)
s += arr[k];
if (s > m)
m = s;
}
}
return m;
}
Также, если вы можете сказать мне, что он делает?
Я решил, что он возвращает добавление положительных целых чисел или наибольшее целое число в массиве.
Но для таких массивов, как {99, -3, 0, 1}
, он возвращает 99
, что, я думаю, связано с ошибкой. Если нет, то у меня нет идеи, что она делает:
{99, 1} => returns 100
{-1, -2, -3} => return -1
{-1, 5, -2} => returns 5
{99, -3, 0, 1} => returns 99 ???