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,一经查实,立即删除!

相关文章

pytest.fixture

pytest.fixture 是 pytest 测试框架中的一个非常强大的功能,它允许你在测试函数运行前后执行一些设置或清理代码。以下是关于 pytest.fixture 的详细介绍: 一、定义与用途 pytest.fixture 是一个装饰器,用于标记一个函数为 fixture。Fixture 函数中的代码可以在测试函数运…

Swift的方法派发机制

1. 静态派发&#xff08;Static Dispatch&#xff09; 静态派发在编译时确定方法的具体实现&#xff0c;调用时直接跳转到该实现。静态派发的优点是性能高&#xff0c;因为不需要运行时查找方法实现。 适用场景&#xff1a; 值类型&#xff08;Struct 和 Enum&#xff09;&am…

C++并发编程指南 09(共享数据)

文章目录 第3章 共享数据本章主要内容共享数据的问题使用互斥保护数据保护数据的替代方案 3.1 共享数据的问题共享数据的核心问题不变量的重要性示例&#xff1a;删除双链表中的节点多线程环境中的问题条件竞争的后果总结3.1.1 条件竞争3.1.2 避免恶性条件竞争 3.2 使用互斥量3…

ZooKeeper 技术全解:概念、功能、文件系统与主从同步

引言 随着分布式系统变得越来越复杂&#xff0c;对协调服务的需求也在不断增长。ZooKeeper 作为一个由 Apache 维护的开源分布式协调服务框架&#xff0c;广泛用于 Hadoop 生态系统和其他需要协调的分布式环境中。这一系统旨在解决分布式应用中常见的挑战&#xff0c;如配置管…

设计方案主要做哪些事情?

目录 1. 需求分析 2. 系统架构设计 3. 数据库设计 4. 接口设计 5. 缓存设计 6. 安全设计 7. 性能优化 8. 高可用与容灾 9. 监控与日志 10. 测试方案 11. 部署方案 12. 文档编写 13. 风险评估 14. 项目管理 总结 设计方案是项目开发的关键步骤,确保项目按计划进…

【语法】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…

深度学习-交易预测

下面为你详细介绍如何使用Python结合深度学习库TensorFlow和Keras来构建一个简单的交易预测模型。在这个示例中&#xff0c;我们以股票价格预测为例&#xff0c;假设我们要根据过去一段时间的股票价格数据来预测未来的价格走势。 步骤分析 数据准备&#xff1a;获取股票价格数…

C++ STL Map 学习学案(提高版)

C++ STL Map 学案(初中生版) 一、学习目标 深入理解 STL 中 map 容器的概念、特点和用途。熟练掌握 map 容器的基本操作,如插入、查找、删除和遍历元素。能够运用 map 容器解决实际编程问题,提升逻辑思维和编程实践能力。二、知识讲解 引入 在日常生活中,我们常常会遇到…

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…

SQL自学,mysql从入门到精通 --- 第 14天,主键、外键的使用

1.主键 PRIMARY KEY 主键的使用 字段值不允许重复&#xff0c;且不允许赋NULL值 创建主键 rootmysqldb 10:11: [d1]> CREATE TABLE t3(-> name varchar(10) PRIMARY KEY,-> age int,-> class varchar(8)-> ); Query OK, 0 rows affected (0.01 sec)rootmys…

DeepSeek深度思考:客户端(Android/iOS)架构设计指南

目标读者&#xff1a;中高级开发者、架构师 适用场景&#xff1a;大型复杂应用开发、跨团队协作、长期维护迭代 一、架构设计核心原则 1.模块化&#xff08;Modularization&#xff09; 横向拆分&#xff1a;按功能边界划分&#xff08;如登录、支付、消息模块&#xff09;纵向…

【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…