zoukankan      html  css  js  c++  java
  • 滑动窗口 | 求最长连续子数组

    题目:

    给定一个数组 {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("
    len= ");
        for (int i = 0;i < 9;i++)
            printf(" %d ", len[i]);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    maven 历史版本下载地址
    eclipse 热部署
    在线代码练习
    Intellij热部署插件JRebel
    模拟数据生成器
    电脑读取U盘总提示格式化
    变形金刚
    slamdunk正在做菜
    丧心病狂的计数
    小明在工作
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11940307.html
Copyright © 2011-2022 走看看