辉映苍穹俊如松


私信TA

用户名:dotcpp0792484

访问量:90

签 名:

失败不过重来而已,但绝境重生方为宿命

等  级
排  名 688
经  验 3956
参赛次数 6
文章发表 9
年  龄 18
在职情况 待业
学  校 贺州学校
专  业

  自我简介:

TA的其他文章

解题思路:
1.  slidingWindowMin 函数:

这个函数用于寻找滑动窗口中的最小值。

外层循环 for (i = 0; i <= n - k; i++) 用于遍历数组中所有可能的滑动窗口起始位置。

内层循环 for (j = 0; j < k; j++) 用于在每个滑动窗口中寻找最小值。

每次找到最小值后,将其打印出来。

2.  main 函数:

 首先读取数组的长度 n 和滑动窗口的大小 k 。

 然后读取数组中的元素。

 最后调用 slidingWindowMin 函数来寻找并打印滑动窗口中的最小值。



注意事项:这个算法的时间复杂度是 O(n*k),其中 n 是数组的长度, k 是滑动窗口的大小。如果需要更高效的算法,可以考虑使用双端队列来优化,将时间复杂度降低到 O(n)。



参考代码:

#include <stdio.h>

#include <stdlib.h>

#include <limits.h>

// 寻找滑动窗口中的最小值

void slidingWindowMin(int arr[], int n, int k) {

    int i, j;

    for (i = 0; i <= n - k; i++) {

        int minVal = INT_MAX;

        for (j = 0; j < k; j++) {

            if (arr[i + j] < minVal) {

                minVal = arr[i + j];

            }

        }

        printf("%d ", minVal);

    }

}

int main() {

    int n, k;

    scanf("%d %d", &n, &k);

    int arr[n];

    for (int i = 0; i < n; i++) {

        scanf("%d", &arr[i]);

    }

    slidingWindowMin(arr, n, k);

    return 0;

}


 

0.0分

1 人评分

  评论区

五星好评
2024-11-21 20:54:35
  • «
  • 1
  • »