AI刷题-子数组和的最大值问题

目录

问题描述

输入格式

输出格式

输入样例

输出样例

说明

数据范围

解题思路:

问题理解

数据结构选择

算法步骤

具体步骤

代码实现: 

1.特判: 不需要删除元素的时候

 2.在前面的判断结束后:k+1,,这是为了应对需要减去一个数字的时候(要保证减了之后剩k个数)

 3.然后就进行滑动窗口计数

 4.枚举找到最小值:

 最终代码:

运行结果:​编辑 


 

问题描述

给定整数数组,我们称其中连续的0个或多个整数为一个子数组,求删除任一元素后,新数组中长度为k的子数组的和的最大值。

输入格式

  • 第一行输入为NKN代表数组长度,K代表子数组长度
  • 第二行输入为N个整数,依次为数组的每个元素

输出格式

一个整数S,代表所有可能新数组中长度为K的子数组的和的最大值。

输入样例

5 3  
2 1 3 -1 4

输出样例

8

说明

选择删除第四个元素,新数组为2 1 3 4,其长度为3的子数组的和是8

数据范围

  • 50% case:1≤K<N≤100,−100≤arr[i]≤1001≤K<N≤100,−100≤arr[i]≤100
  • 100% case:1≤K<N≤1×106,−100≤arr[i]≤1001≤K<N≤1×106,−100≤arr[i]≤100

解题思路:

问题理解

我们需要在一个整数数组中,删除一个元素后,找到新数组中长度为 k 的子数组的和的最大值。

数据结构选择

  • 由于我们需要频繁地计算子数组的和,使用前缀和数组(Prefix Sum Array)可以有效地减少计算时间。

算法步骤

  1. 计算前缀和:首先计算原始数组的前缀和数组,这样可以快速计算任意子数组的和。
  2. 枚举删除元素:对于每个可能删除的元素,计算删除该元素后的新数组中长度为 k 的子数组的和。
  3. 更新最大值:在枚举过程中,记录并更新最大子数组和。

具体步骤

  1. 前缀和数组

    • 创建一个前缀和数组 prefix_sum,其中 prefix_sum[i] 表示从数组开头到第 i 个元素的和。
    • prefix_sum[i] = prefix_sum[i-1] + nums[i]
  2. 删除元素后的子数组和

    • 对于每个元素 nums[i],计算删除该元素后的新数组中长度为 k 的子数组的和。
    • 删除 nums[i] 后,新数组中长度为 k 的子数组的和可以通过前缀和数组快速计算。
  3. 更新最大值

    • 在枚举删除元素的过程中,记录并更新最大子数组和。

 

代码实现: 

1.特判: 不需要删除元素的时候

// 如果数组长度恰好为 k,不需要删除元素if (n == k) {int sum = 0;for (int num : nums) {sum += num;}return sum;}

 2.在前面的判断结束后:k+1,,这是为了应对需要减去一个数字的时候(要保证减了之后剩k个数)

k++;

 3.然后就进行滑动窗口计数

// 滑动窗口计算长度为 k 的最大和int maxSum = INT_MIN, windowSum = 0, min = nums[0];for (int i = 0; i < k; i++) {windowSum += nums[i];min = std::min(min, nums[i]);}
maxSum = windowSum - min;

 4.枚举找到最小值:

// 枚举找到最小值for (int i = k; i < n; i++) {windowSum += nums[i] - nums[i - k];min = nums[i];for (int j = i - k + 1; j <= i; j++) {min = std::min(min, nums[j]);}maxSum = std::max(maxSum, windowSum - min);}

 最终代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>int solution(int n, int k, const std::vector<int>& nums) {// 如果数组长度恰好为 k,不需要删除元素if (n == k) {int sum = 0;for (int num : nums) {sum += num;}return sum;}k++;// 滑动窗口计算长度为 k 的最大和int maxSum = INT_MIN, windowSum = 0, min = nums[0];for (int i = 0; i < k; i++) {windowSum += nums[i];min = std::min(min, nums[i]);}maxSum = windowSum - min;// 枚举找到最小值for (int i = k; i < n; i++) {windowSum += nums[i] - nums[i - k];min = nums[i];for (int j = i - k + 1; j <= i; j++) {min = std::min(min, nums[j]);}maxSum = std::max(maxSum, windowSum - min);}return maxSum;
}int main() {// Add your test cases herestd::cout << (solution(5, 3, {2, 1, 3, -1, 4}) == 8) << std::endl;return 0;
}

运行结果: 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【语法】C++的内存管理 模板

内存管理&#xff1a; 在C语言中&#xff0c;动态开辟空间可以用malloc&#xff0c;calloc&#xff0c;realloc这三个函数&#xff0c;下面先来复习一下这三者的区别 malloc和calloc都是用来开辟新空间&#xff0c;calloc在malloc的基础上还会初始化该空间为0&#xff0c;用法…

30~32.ppt

目录 30.导游小姚-介绍首都北京❗ 题目​ 解析 31.小张-旅游产品推广文章 题目 解析 32.小李-水的知识❗ 题目​ 解析 30.导游小姚-介绍首都北京❗ 题目 解析 新建幻灯片-从大纲-重置-检查设计→主题对话框→浏览主题&#xff1a;考生文件夹&#xff08;注意&#x…

uniapp实现人脸识别(不使用三方插件)

uniapp实现人脸识别 内容简介功能实现上传身份证进行人脸比对 遇到的问题 内容简介 1.拍摄/相册将身份证照片上传到接口进行图片解析 2.使用live-pusher组件拍摄人脸照片&#xff0c;上传接口与身份证人脸进行比对 功能实现 上传身份证 先看下效果 点击按钮调用chooseImage…

Evaluating Very Long-Term Conversational Memory of LLM Agents 论文

Abstract : 长期开放域对话的现有作品着重于评估不超过五个聊天会议的上下文中的模型响应。尽管LongContext大语言模型&#xff08;LLM&#xff09;和检索增强发电&#xff08;RAG&#xff09;技术的进步&#xff0c;但在长期对话中的功效仍未得到探索。为了解决这一研究差距&a…

相对收益-固定收益组合归因-Campisi模型

固定收益组合归因-Campisi模型 1 Campisi模型11.1 Campisi归因框架1.2 Campisi模型绝对收益分解1.2.1 票息收益1. 2.2 收敛收益1. 2.3 骑乘收益1. 2.4 平移收益1. 2.5 扭曲收益1. 2.6 利差收益1. 2.7 残差收益 1.3 Campisi模型超额收益分解 2 Campisi模型22.1 分解框架2.2 模型…

IntelliJ IDEA使用经验(十三):使用Git克隆github的开源项目

文章目录 问题背景办法1、设置git代理&#xff1b;2、再次克隆项目&#xff1b;3、再次按常规方式进行git克隆即可。 问题背景 由于github在国外&#xff0c;很多时候我们在使用idea克隆开源项目的时候&#xff0c;没办法检出&#xff0c;提示 连接重置。 办法 1、设置git代…

JAVA安全之Java Agent打内存马

基本介绍 Java Agent是一种特殊的Java程序&#xff0c;它允许开发者在Java虚拟机(JVM)启动时或运行期间通过java.lang.instrument包提供的Java标准接口进行代码插桩&#xff0c;从而实现在Java应用程序类加载和运行期间动态修改已加载或者未加载的类&#xff0c;包括类的属性、…

RabbitMQ 消息顺序性保证

方式一&#xff1a;Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费&#xff0c;并将exclusive设置为true时&#xff0c;第二个消费者会抛出异常&#xff1a; com.rabbitmq.client.AlreadyClosedEx…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构&#xff0c;分布式架构的同步调用里&#xff0c;无论是方法调用&#xff0c;还是 OpenFeign 难免会有以下问题&#xff1a; 扩展性差&#xff08;高耦合&#xff0c;需要依赖对应的服务&#xff0c;同样的事件&#xff0c;不断有新需求&#xff0…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

cs106x-lecture3(Autumn 2017)

打卡cs106x(Autumn 2017)-lecture3 1、streamErrors Suppose an input file named streamErrors-data.txt contains the following text: Donald Knuth M 76 Stanford U. The code below attempts to read the data from the file, but each section has a bug. Correct th…

C++模板编程——typelist的实现

文章最后给出了汇总的代码&#xff0c;可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似&#xff0c;只不过typelist存储的不是变量&#xff0c;而是类型。 typelist简单来说就是一个类型容器&#xff0c;能够提供一…

windows通过网络向Ubuntu发送文件/目录

由于最近要使用树莓派进行一些代码练习&#xff0c;但是好多东西都在windows里或虚拟机上&#xff0c;就想将文件传输到树莓派上&#xff0c;但试了发现u盘不能简单传送&#xff0c;就在网络上找到了通过windows 的scp命令传送 前提是树莓派先开启ssh服务&#xff0c;且Window…

字节跳动后端一面

&#x1f4cd;1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式&#xff0c;它使用DEFLATE算法来减少文件大小&#xff0c;广泛应用于网络传输和文件存储中以提高效率。 &#x1f680; 使用场景&#xff1a; • 网站优化&#xff1a;通过压缩HTML、CSS、JavaScript文件来…

三维模拟-机械臂自翻车

机械仿真 前言效果图后续 前言 最近在研究Unity机械仿真&#xff0c;用Unity实现其运动学仿真展示的功能&#xff0c;发现一个好用的插件“MGS-Machinery-master”&#xff0c;完美的解决了Unity关节定义缺少液压缸伸缩关节功能&#xff0c;内置了多个场景&#xff0c;讲真的&…

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时&#xff0c;为梳理知识点和自己回看而记录&#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a;商…

史上最快 Python版本 Python 3.13 安装教程

Python3.13安装和配置 一、Python的下载 1. 网盘下载地址 (下载速度比较快&#xff0c;推荐&#xff09; Python3.13.0下载&#xff1a;Python3.13.0下载地址&#xff08;windows&#xff09;3.13.0下载地址&#xff08;windows&#xff09; 点击下面的下载链接&#xff0c…

AWS Fargate

AWS Fargate 是一个由 Amazon Web Services (AWS) 提供的无服务器容器计算引擎。它使开发者能够运行容器化应用程序&#xff0c;而无需管理底层的服务器或虚拟机。简而言之&#xff0c;AWS Fargate 让你只需关注应用的容器本身&#xff0c;而不需要管理运行容器的基础设施&…

vue3+vite+eslint|prettier+elementplus+国际化+axios封装+pinia

文章目录 vue3 vite 创建项目如果创建项目选了 eslint prettier从零教你使用 eslint prettier第一步&#xff0c;下载eslint第二步&#xff0c;创建eslint配置文件&#xff0c;并下载好其他插件第三步&#xff1a;安装 prettier安装后配置 eslint (2025/2/7 补充) 第四步&am…

vLLM V1 重磅升级:核心架构全面革新

本文主要是 翻译简化个人评读&#xff0c;原文请参考&#xff1a;vLLM V1: A Major Upgrade to vLLM’s Core Architecture vLLM V1 开发背景 2025年1月27日&#xff0c;vLLM 开发团队推出 vLLM V1 alpha 版本&#xff0c;这是对框架核心架构的里程碑式升级。基于过去一年半的…