01 滑动窗口最大值

01 滑动窗口最大值

题目描述

/*
 * 滑动窗口最大值
 *
 * 题目描述
 * 有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,
 * 每次窗口滑动产生一个窗口和(窗口内所有数的和),求窗口产生的所有窗口和最大值
 *
 * 样例
 * 输入
 * 6
 * 12 10 20 30 15 23
 * 3
 *
 * 输出
 * 68
 *
 * 说明,窗口长度为3,窗口滑动山城的窗口和分别是 12+10+20=42, 10+20+30=60, 20+30+15=55, 30+15+23=68
 *
 * */

代码

#include "iostream"
#include "vector"
using namespace std;
int main() {
  int n;
  cin >> n;

  vector<int> arr(n);
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }

  int with;
  cin >> with;

//  cout << n << endl;
//  for (int i = 0; i < n; i++) {
//    cout << arr[i];
//  }
//  cout << "" << endl;
//  cout << with << endl;

  int sum = 0;
  int ans = 0;
  for (int i = 0; i < with; i++) {
    sum += arr[i];
  }
  ans = sum;

  int right = with;
  for (;right < n;right++) {
    sum = sum + arr[right] - arr[right-with];
    ans = max(ans, sum);
  }
  cout << ans << endl;
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值