Максимальная непрерывная сумма последовательности и последовательность

1

Я пытаюсь найти максимальную сумму массива и напечатать соответствующую последовательность, которая производит эту максимальную сумму. Мне удалось получить правильную сумму, но когда я пытаюсь распечатать последовательность для некоторых тестовых массивов, моя программа оставляет один из индексов. Например, для массива [1, -1, 2, 3, -2] моя программа находит максимальную сумму 5, но она печатает только 1, -1, 2 вместо 1, -1, 2, 3. Я знаю, что проблема находится внутри цикла for, а переменная count не увеличивается правильно, но я не знаю, как ее исправить.

    import java.util.*;

    public class practice
    {
        public static void main(String args[])
        {
            int arr[] = {1, -1, 2, 3, -2};
            int arr2[] = {1, 12, -2, -15, 10};
            int arr3[] = {0, -1, -3, -5, -6};
            int arr4[] = {1, 2, 3, 4, 5};
            int arr5[] = {1, 12, -2, 15, 10};

            subsequence(arr);
            subsequence(arr2);
            subsequence(arr3);
            subsequence(arr4);
            subsequence(arr5);

        }

        public static void subsequence(int[] arr)
        {
            int max = 0;
            int tempMax = 0;
            int count = 0;

            // My problem is in here:
            for (int i = 0; i < arr.length; i++)
            {
                tempMax += arr[i];
                if (max < tempMax)
                {
                    max = tempMax;
                    count++;
                }
            }

            System.out.println("count = " + count);
            System.out.println("Max sum is " + max);
            System.out.print("Sequence is: ");

            for (int j = 0; j < count; j++)
                System.out.print(arr[j] + " ");

            System.out.println("\n");
        }
    }

вот мой вывод

    count = 3
    Max sum is 5
    Sequence is: 1 -1 2 

    count = 2
    Max sum is 13
    Sequence is: 1 12 

    count = 0
    Max sum is 0
    Sequence is: 

    count = 5
    Max sum is 15
    Sequence is: 1 2 3 4 5 

    count = 4
    Max sum is 36
    Sequence is: 1 12 -2 15 

вот мой отредактированный код:

public class practice
{
    public static void main(String args[])
    {
        int arr[] = {1, -1, 2, 3, -2};
        int arr2[] = {1, 12, -2, -15, 10};
        int arr3[] = {0, -1, -3, -5, -6};
        int arr4[] = {-1, 2, 3, -4, -5};
        int arr5[] = {1, 12, -2, 15, 10};

        subsequence(arr);

        subsequence(arr2);

        subsequence(arr3);

        subsequence(arr4);

        subsequence(arr5);
    }

    public static void subsequence(int[] arr)
    {
        int max = 0;
        int tempMax = 0;
        int count = 0;
        int start = 0;
        int end = 0;

        if (arr[0] < 0)
           start++;


        for (int i = start; i < arr.length; i++)
        {
            tempMax += arr[i];

            if (max < tempMax)
            {
                max = tempMax;
                count = i;
            }

            if (Math.abs(arr[i]) < tempMax)
               end = i;


         }

         System.out.println("count = " + count);
         System.out.println("Max sum is " + max);
         System.out.print("Sequence is: ");

         if (arr[end] < 0)
               end--;

         for (int j = start; j <= end; j++)
             System.out.print(arr[j] + " ");

         System.out.println("\n");
         }

    }

и вот мой новый выход:

count = 3
Max sum is 5
Sequence is: 1 -1 2 3 

count = 1
Max sum is 13
Sequence is: 1 12 

count = 0
Max sum is 0
Sequence is: 0 

count = 2
Max sum is 5
Sequence is: 2 3 

count = 4
Max sum is 36
Sequence is: 1 12 -2 15 10 
  • 0
    Вы сказали, что это печатает 1, -1, 2 вместо 1, -1, 2, 3, но что здесь произошло -2?
  • 0
    причина -2 не появляется в том, что она не создает максимальную сумму. если бы было включено -2, то сумма была бы равна 3, когда фактическая максимальная сумма равна 5.
Показать ещё 4 комментария
Теги:
sum
sequence

1 ответ

1
Лучший ответ

Ваша переменная count не имеет смысла, так как вы только увеличиваете ее, если найдете нового кандидата для максимума. Когда вы найдете новый максимальный кандидат, установите count на текущий индекс:

count = i;

Затем, когда вы печатаете последовательность, измените условие на j <= count.

Кстати, я не уверен, что ваша реализация верна. Вы всегда возвращаете подпоследовательность, которая начинается в начале массива. Что делать, если подпоследовательность с максимальной суммой не начинается в начале? (например, в [-1, 2,3,4,5], максимальная последовательность [2,3,4,5]).

  • 0
    какая здесь максимальная последовательность? что это значит?
  • 0
    @KickButtowski Максимальная последовательность - это подмассив, который создает максимальную сумму.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню