Хитрый вложенный l oop O (n + m)? - PullRequest
0 голосов
/ 29 апреля 2020

Я не совсем понял, как работает этот l oop:

 for(int i = 0, j = 0; i < n; i++){
        for(; j < m; j++){

подробнее Соответствующий пример

int arr[] = {1, 2, 3, 4, 5, 6, 7};
int arr1[] = {7, 6, 5, 4, 3, 2, 1};
for (int i = 0, j = 0; i < n; i++) {
  for (; j < m; j++) {
    if (arr[i] + arr1[j] < 0) break;
    if (arr[i] + arr1[j] > max) max = arr[i] + arr1[j];
  }
}

при l oop начинает ли они работать одновременно? например, как [[1 + 7] [2 + 6] [3 + 5] et c .....], значит, при увеличении они оба составляют сумму

или работает как вложенные циклы

и что если мы сломаем или заставим продолжить во втором l oop что произойдет? очень подробная и более подробная информация и объяснения будут оценены

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Сложность будет O (n + m), поскольку внутренний l oop будет работать только один раз, а j не сбрасывается в 0.

0 голосов
/ 29 апреля 2020

Это вложенное l oop с внутренним и внешним l oop. Переменная для внутреннего l oop инициализируется во внешнем l oop. Это довольно необычно. Если вы не уверены, как он себя ведет, вы можете просто напечатать что-нибудь в System.out здесь и там. Это увеличивает (i = 0, j = 0), (i = 0, j = 1), ..., (i = 0, j = m), (i = 1, j = 0), ... Если Вы прерываете или продолжаете во внутреннем l oop, затем оно продолжается с (i + 1, j), поскольку j не сбрасывается до 0.

Как следствие, сложность времени составляет O (n * m).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...