У меня был экзамен, который я не смог отобразить.
Пожалуйста, помогите, как этого добиться
Дан массив 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));
}
}
Обновлено, но я знаю, что это неправильный метод, который я написал.
Я предполагаю, что вам нужно найти не сумму, а минимальный элемент?
Да, это совершенно неправильно. Это вообще связано с заданием? Похоже, вы пытаетесь найти максимальную сумму вместо минимального элемента.
Пожалуйста, прочтите Как спросить перед публикацией.
Так что только я не разместил свой код.
Вопрос, который вы задали, и код, который вы предоставили, совершенно разные
Похоже, вы хотите, чтобы мы сделали вашу домашнюю работу за вас




Это очень простое решение, которое я написал примерно за 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();
}
}
Где твоя собственная попытка?