Как найти под-массив самой длинной нечетной суммы в заданном целочисленном массиве?(Наиболее эффективным способом) - PullRequest
0 голосов
/ 23 апреля 2019

Проблема: вам нужно найти самый длинный вложенный массив с нечетной суммой в данном массиве целых чисел, но сложность по времени и вспомогательному пространству должны быть лучшими.

Я пытался обойти массив с циклом while и двумя переменными для индексов (low, high while (low <= high) ...), но у меня не было хороших ответов каждый раз ... </p>

Я пробовал это: (сумма является общей суммой массива)

while (low <= high) {

            if((sum - a[low]) % 2 != 0)
                return (high - low);

            else if((sum - a[high]) % 2 != 0)
                return (high - low);

            else{
                if((sum - a[low]) % 2 == 0){
                    sum -= a[low];
                    low++;
                }

                if((sum - a[high]) % 2 == 0){
                    sum -= a[high];
                    high--;
                }
            }
        }

Для {2, 2, 2, 1, 1, 2, 2, 2, 2} Я ожидаю выхода 5 но я получаю 2

1 Ответ

0 голосов
/ 23 апреля 2019
  1. Если весь массив нечетный, то вы его получили.
  2. Если он четный, вам нужно найти четное число, ближайшее к концу массива.
    • Если это число близко к началу, то результатом является подпарада от следующей позиции к концу
    • Если это число близко к концу, то результатом является подпарада от начала к этому номеру (исключая само число).
...