滑动窗口 | 求最长连续子数组

题目:

给定一个数组 {3, 1, 2, 1} 和一个数字k =4。求这个数组的一个最长连续子数组,这个最长连续子数组中所有数字的和必须小于或等于k。 例如,上面这个例子中,连续子数组有这么多种情况: {3}, {1}, {2}, {1}, {3, 1}, {1, 2}, {2, 1}, {3, 1, 2}, {1, 2, 1}, {3, 1, 2, 1}。 其中符合条件的就只有{1, 2, 1}。

代码:

代码分析的数据跟题目不一样但是换汤不换药(╯▽╰ )

#include <iostream>
#include<stdio.h> 
using namespace std;
int main()
{
    int arr[9] = { 1,1,1,9,9,1,1,1,1 };//存放基础数据 
    int k = 4;//目标 
    int sum[9]={};
    int len[9]={};  //滑窗长度

    int loclen = 0;         //记录当前滑窗长度
    int locsum = 0;         //记录当前滑窗求和
    int startindex = 0;     //记录滑窗起始位置

    for (int i = 0;i < 9;i++)
    {
        locsum = locsum + arr[i];
        if (locsum > k)
        {
            locsum = locsum - arr[startindex];
            startindex++;
            sum[i] = locsum;
            len[i] = loclen;
        }
        else
        {
            sum[i] = locsum;
            loclen = loclen + 1;//窗口长度自增 
            len[i] = loclen;
        }
     
    }

    printf("sum= ");
    for (int i = 0;i < 9;i++)
        printf(" %d ", sum[i]);
    
    printf("\nlen= ");
    for (int i = 0;i < 9;i++)
        printf(" %d ", len[i]);
    printf("\n");
    return 0;
}

 

posted @ 2019-11-27 10:31  东坡肉肉君  阅读(372)  评论(0编辑  收藏  举报