Sliding Window Sum

Code

#include <stdio.h>

void sliding_window_sum_optimized(int arr[], int n, int k) {
    if (n < k) return; // Kiểm tra lỗi nếu k lớn hơn mảng

    int current_sum = 0;

    // 1. Tính tổng cửa sổ đầu tiên (k phần tử đầu)
    for (int i = 0; i < k; i++) {
        current_sum += arr[i];
    }
    printf("%d ", current_sum);

    // 2. Trượt cửa sổ từ phần tử thứ k đến hết mảng
    for (int i = 1; i <= n - k; i++) {
        // Công thức trượt: Tổng mới = Tổng cũ - (Phần tử đi ra) + (Phần tử đi vào)
        // Phần tử đi ra là: arr[i - 1]
        // Phần tử đi vào là: arr[i + k - 1]
        current_sum = current_sum - arr[i - 1] + arr[i + k - 1];
        
        printf("%d ", current_sum);
    }
}

int main() {
    int n, k;
    int arr[1000]; // Tăng kích thước mảng để an toàn
    scanf("%d %d", &n, &k);
    for (int i = 0; i < n; i++) scanf("%d", &arr[i]);

    sliding_window_sum_optimized(arr, n, k);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

5 3 1 2 3 4 5

Expected Output

6 9 12