Как найти минимум в подмассиве в Java

У меня был экзамен, который я не смог отобразить.

Пожалуйста, помогите, как этого добиться

Дан массив A[] размера N и целое число k. Задача состоит в том, чтобы напечатать минимальный элемент для каждого подмассива размера k.

For Each valid index i(0<=i <=N -K) Have to print min(A[i],A[i+1],A[i+2]...A[i+k]).

Формат ввода: Первая строка будет содержать два целых числа N и k. Вторая строка содержит N целых чисел, обозначающих элементы массива A[]

Ограничения:

1 <=N <=10^5
1<=K <= N
1<=A[i] <=10^6

Формат вывода выведите минимальное количество элементов для каждого подмассива размера k, разделенных пробелом.

Вход:

5 2
10 0 3 2 5

выход:

0 0 2 2

Но я пытался найти максимальный элемент:

Я знаю, что это неправильно. Но я знаю только это.

public static int maxSum(int arr[], int n, int k) 
    { 
        // k must be greater 
        if (n < k) 
        { 
           System.out.println("Invalid"); 
           return -1; 
        } 

        // Compute sum of first window of size k 
        int res = 0; 
        for (int i=0; i<k; i++) 
           res += arr[i]; 

        // Compute sums of remaining windows by 
        // removing first element of previous 
        // window and adding last element of  
        // current window. 
        int curr_sum = res; 
        for (int i=k; i<n; i++) 
        { 
           curr_sum += arr[i] - arr[i-k]; 
           res = Math.max(res, curr_sum); 
        } 

        return res; 
    } 

    /* Driver program to test above function */
    public static void main(String[] args)  
    { 
        int arr[] = {5,2,10,0,3,2,5}; 
        int k = 7; 
        int n = arr.length; 
        System.out.println(maxSum(arr, n, k)); 
    } 
} 

Где твоя собственная попытка?

klutt 15.06.2019 14:01

Обновлено, но я знаю, что это неправильный метод, который я написал.

Star 15.06.2019 14:10

Я предполагаю, что вам нужно найти не сумму, а минимальный элемент?

Dmitriy Popov 15.06.2019 14:14

Да, это совершенно неправильно. Это вообще связано с заданием? Похоже, вы пытаетесь найти максимальную сумму вместо минимального элемента.

klutt 15.06.2019 14:15

Пожалуйста, прочтите Как спросить перед публикацией.

klutt 15.06.2019 14:15

Так что только я не разместил свой код.

Star 15.06.2019 14:18

Вопрос, который вы задали, и код, который вы предоставили, совершенно разные

Shashank Gupta 15.06.2019 14:19

Похоже, вы хотите, чтобы мы сделали вашу домашнюю работу за вас

Joakim Danielson 15.06.2019 14:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
8
1 318
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это очень простое решение, которое я написал примерно за 5 минут. Обратите внимание, что я не выполняю ввод, значения n, k, array просто жестко запрограммированы в методе main.

package stackoverflow;

public class MinimumSubArray {

    public static void main(String[] args) {
        solve(5, 2, new int[]{ 10, 0, 3, 2, 5 }); // expect 0 0 2 2
        solve(5, 2, new int[]{ 10, 0, 3, 2, 1 }); // expect 0 0 2 1
        solve(1, 1, new int[]{ 6 }); // expect 6
        solve(3, 3, new int[]{ 3, 2, 1 }); // expect 1
        solve(3, 1, new int[]{ 3, 2, 1 }); // expect 3 2 1
    }

    private static void solve(final int n, final int k, final int[] array) {
        if (n != array.length)
            throw new IllegalArgumentException( String.format("Array length must be %d.", n) );

        if (k > n)
            throw new IllegalArgumentException( String.format("K = %d is bigger than n = %d.", k, n) );

        int currentStartIndex = 0;

        while (currentStartIndex <= (n - k)) {
            int min = array[currentStartIndex];

            for (int i = currentStartIndex + 1; i < currentStartIndex + k; i++) {
                if (array[i] < min) {
                    min = array[i];
                }
            }

            System.out.printf("%d ", min); // print minimum of the current sub-array

            currentStartIndex++;
        }

        System.out.println();
    }
}

Другие вопросы по теме