大学时候想的一个算法——计算数组中最大和序列

XJTU_ 西安交通大学2020大学计算机作业-第九周 XJTU_ 西安交通大学2020大学计算机作业-第九周 XJTU_ 西安交通大学2020大学计算机作业-第九周 注:11题有三个用例没通过,我觉得没问题,周三改。 俺又更新了,还是求点星星???? 文章没上传到github,反正没人点星星:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果这篇文章带给你了帮助或者灵感,欢迎给我点个星星,谢谢!!! 第一题 "一个数组A中存有n(n>0)个整数,在不允许使用另外数组的前提下,将每个 阅读详情
本文与java语言无关,纯粹就是个解决问题的想法

问题:给定一个数组,要求求出数组中连续数和最大的索引对。比如,给定一个数组,里面有正数有负数和0。其中肯定有一个连续的序列(连续的,中间不能间断),比如说是索引3到索引5,这个序列的和是这个数组中连续序列中最大的,别的都没这个大。
{0,2.-1,9,7.6,-8,16},这个数组中就是索引三到索引五这个连续序列的和最大。要求算法的时间复杂度问O(n)。

问题解决:如果时间复杂度要求是O(n³)或者是O(n平方),就没意思了,直接循环搞定。

O(n)的时间复杂度如何解决:

注意,因为整个数组可能都是负数,这时候问题就退化成寻找数列中最大的负数了。首先,针对这种情况进行处理,将数组进行一次循环,找出第一个非负数索引和最后一个非负数索引,这个可以在一次循环中完成,如果 1)没找到,说明数组中全是负数,泽跳出循环,进行下一轮循环,寻找最大负数  2)如果两者相等,说明数组中只有一个正数,直接返回索引对  3)如果两者不等,则是相对复杂的情况,下面进行处理,到现在位置,时间复杂度是O(n),因为之循环了一次。

1:将数组的第一个非负索引和最后一个非负索引之间的连续的正数和连续的负数相加。比如{0,2.-1,9,7.6,-8,16},处理完后就应该得到数组{2, -1, 22, -8, 16}。这样整个数组就肯定是一个正负相间的数组。而且开头和结尾肯定是非负数。在进行处理的时候,还要维护一个大小是结果两倍的数组,用来存储每个元素的原来序列数值,比如,对于上面的数组,这个序列数组就应该是{0,1,2,2,3,5,6,6,7},这个数组是数组index,其中0,1是第一个元素在原来数组中的序列,2,2 是第二个元素在原来数组中的序列,3,5是第三个元素在原数组中的序列,依此类推。本步骤的时间复杂度也是O(n),没有循环嵌套,空间复杂度是O(2n)

2:现在得到一个正负相间的数组,而且数组中开头结尾都是非负数,而且数组中没个元素在原始数组中的索引序列对都是知道的。然后:
int start = 0;
int end = 0;
int count = 0;
对这个数组进行一次循环,循环中:
count += 数组[i]
if(count > 0){
将count的索引对(start, end)放入数组A中
将count的数值放入数组B中
} else{
count = 0;
}
这个循环时间复杂度是O(n),空间复杂度O(2n)
循环结束后,要的结果就在数组A和数组B中,遍历数组B找到最大的元素,然后根据最大元素的索引去A中找出索引对,然后根据这个索引对去前面的数组index找出结果。时间复杂度O(n)


整个算法看下来,时间复杂度就是O(n),进行了4次O(n)的循环,空间复杂度比较大一些,最大可能需要原来数组大小五倍的存储空间才能完成整个计算。





清华大学算法训练营 —— 序列计数 描述 给定一个n个整数的序列以及一个非负整数d,请你输出这个序列中有多少个连续子序列(长度大于1),满足该子序列的最大值最小值之差不大于d。 连续子序列:序列1 2 3中长度大于1的连续子序列有: 1 2 2 3 1 2 3 输入 第一行包含两个整数n,d。(1<=n<=300000, 0<=d&a 阅读详情

相关推荐

东北大学oj NEU-OJ 1044简易版最长序列

/* Name: NEU-OJ 1044简易版最长序列 Author: Unimen Date: 31/05/2011 16:29 Description: 简单题目 */#include #include using namespace std;int nCase;int n;unsigned array[100001];int cmp(

Unimen的专栏 3693

C++ 查找数组中第k小的数

/** 题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数的范围[1, 5000] 输出描述 该数组中第k小数 样例输入 4 2 1 2 3 4 样例输出 2 **/ #include<iostream> using names...

WYXHAHAHA123的博客 5507

二、PCIE的TLP包的封包解包原理

熟悉 PCIE 的组建包的过程,以及内部的字段细节的定 义,掌握如何发送接收 Mrd(memory read TLP)、 Mwr(Memory write TLP)、Cpl (Completion TLP)和 Cpld(Completion with data TLP)命令包,深入理解 PCIE 底层协议工作过程

k7126685的博客 3931

大学生入门:引用数据类型——数组及其易踩坑的点

本文详细介绍了Java中数组的基本概念和使用方法。首先讲解了数组作为引用数据类型的特点:固定大小、连续内存、相同类型和随机访问。重点阐述了一维数组的两种定义方式、静态/动态初始化方法及内存存储机制。文章还介绍了数组的常见操作,包括循环遍历、增强型for循环使用以及Arrays工具类中的toString、copyOf、sort、fill、binarySearch等方法。对二维数组的定义、内存模型和访问方式也做了详细说明。最后总结了数组使用中常见的易错点,如未初始化、引用传递、数组越界、空指针异常等问题。

qq_73698057的博客 908

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

在 Windows 10 中通过 WSL2 安装 vLLM 部署本地大模型的方法和步骤

通过 WSL2 在 Windows 10 中部署 vLLM 的核心优势是兼顾 Windows 生态与 Linux 环境的 GPU 加速能力,适合需要在 Windows 下开发但依赖 vLLM 高性能推理的场景。相比原生 Windows 部署(Ollama 等工具),该方案性能更优(接近原生 Ubuntu),且支持更大模型和量化优化。若追求极致性能,建议直接使用 Ubuntu 系统;若必须依赖 Windows 工具链,WSL2 + vLLM 是当前最优选择。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 3754

求数组中和最大的子序列

转贴:http://eliteworks.spaces.live.com/blog/cns!4D58C57B1D952D41!187.entry数组子序列求和问题!Author: Kevin (刘鑫) 问题描述有一整型数组,其中元素可正、可负、也可为零。要求在该数组中找到一个子序列,其和在所有子序列中最大,并将该最大值及该子序列的起始和终止位置输出。 算法描述 1.ma

Jacky Shin的专栏 4857

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

LeetCode(2)

2021-07-14 75、从前序与中序遍历序列构造二叉树 递归,注意有列表为空的情况 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution:

一枚小白的博客 652

Windows下Anaconda换清华镜像源最全指南(含常见问题解决)

本文提供了一份详尽的Windows系统下Anaconda配置清华镜像源的完整指南。针对网络下载缓慢的痛点,文章详细对比了命令行添加与直接编辑配置文件两种主流方法,并重点解决了配置过程中常见的文件缺失、安装失败、环境求解缓慢等疑难问题,帮助用户一劳永逸地提升包管理效率。

brandy的博客 337

数据库:关系运算整理大全(包括关系代数、元组关系演算、域关系演算)

数据库关系运算: 1. 关系代数(基本关系代数、附加关系代数、扩展关系代数) 2. 元组关系演算 3. 域关系演算

ysji's blog 2万+

算法导论第九章例题之寻找最大数和最小数优化版

该算法为寻找最大值和最小值的优化版,普通的方法需要比较3(n-2)/2次,而优化之后的算法只需要比较2lgn-n/2次。 思路为:将数组中元素两两比较,大的放到big数组中,小的放到small数组中,对big数组中的数字两两比较,去掉小的,保留大的,直到只剩一个元素为止。该元素即为最大值。 求最小值的思路同最大值。 具体思路见代码: //优化算法 //第九章例题,以2lgn-n/2的比较次

小博客 1577

告别卡顿!在RK3588上优化Gstreamer推拉流与RKNN推理的完整Pipeline实战

本文详细介绍了在RK3588平台上优化Gstreamer推拉流与RKNN推理的全链路Pipeline实战。通过解码环节参数调优、RKNN线程管理、内存预分配策略以及编码输出优化,实现60FPS流畅处理与亚秒级延迟。特别针对实时视频分析场景,提供了从rtspsrc到appsink的毫秒级优化方案,助力开发者构建零卡顿的智能视觉系统。

weixin_30698527的博客 485

复旦大学计算机学院上机考试——(2019-2) 最大连续子序列

问题描述: 给定一个数字序列A1,A2…An,求i,j(1<=i<=j<=n),使得Ai+…+Aj最大,输出这个最大和。 样例输入: 输入: 6 -2 11 -4 13 -5 -2 输出: 20 思路: 1.记录每个a[i]的最大sum, 然后找到最大的一个输出。时间复杂度O(n^2) 2.动态规划。 很经典的动态规划题。 利用dp[i]记录以a[i]结...

SealChen的博客 716

YOLOv8 眼底病变检测(眼底照片)详细说明

本文介绍了基于YOLOv8的眼底病变自动检测系统。该系统可识别糖尿病视网膜病变、青光眼等5类常见眼底病变,包括微动脉瘤、出血点等特征。核心技术包含图像预处理、模型训练、病变检测与量化分析三个模块,采用1024×1024高分辨率输入,针对医学图像特点优化数据增强策略。系统支持批量处理、可视化标注和临床报告生成,提供病变数量、面积密度和严重程度评分等量化指标。特别强调医学合规性要求,需专业医生参与数据标注和模型验证,符合医疗器械认证标准。该系统可作为眼科医生的辅助诊断工具,提高眼底病变筛查效率。

u010117029的博客 133

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数组中最大和的子数组

题目: 输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。 例如: 输入的数组为1, -2, 3, 10, -4, 7, 2, -5,最大和的连续子数组为3, 10, -4, 7, 2,其最大和为18。 背景: 本题最初为2005年浙江大学计算机系考研题的最后一道程序设计题,在2006年里包括google在内的很多知名公司都把本题当作面试题...

android_mylove的专栏 75

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

关于如何查找数组中和最大的子数组

采用动态规划的思想 int MaxSub(int a[],int n,int& begin,int& end)//a[]是给定的数组,n是数组中元素个数,begin和end分别记录起始项和末项 { int sum=0;//最大子段和 int b=0;//最后一项为a[i]的序列构成的最大子段和 for(int i=0;i<n;i++) { if(b>

佳颖的专栏 2623

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

求最大连续子序列之和C语言,杭州电子科技大学 Online Judge 之 “最大连续子序列(ID1231)”解题报告...

杭州电子科技大学 Online Judge 之 “最大连续子序列(ID1231)”解题报告杭州电子科技大学Online Judge 之 “最大连续子序列(ID1231)”解题报告巧若拙(欢迎转载,但请注明出处:http://blog.)Problem Description给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,Nj }...

weixin_30430333的博客 337

Genome Research | 串联重复序列比对算法RaMA

序列比对一直是序列分析中最基本的任务,可以按照一定规则对序列进行排列,得到序列之间的进化差异,帮助计算序列之间的相似性、同源性和功能结构关系。为此,本期生信算法公众号介绍的文献是电子科技大学邹权教授课题组最近的文章:Fast sequence alignment for centromeres with RaMA,2025年2月发表在Genome Research(现IF:6.2)期刊,RaMA采用寻找低频k-mer,对序列进行分割比对,最终得到理想的比对结果。可以找到序列间的比对骨架。

david393的博客 1111

中国矿业大学——算法——实验34-最长子序列

我们不用贪心来做这道题,看到任何一个线段和,这不是找最大前缀和吗。那就用最熟悉的方法来做。

Che_Che_的博客 183

2024山东大学计算机复试上机真题

2024山东大学计算机复试上机真题。

u014339447的博客 1659

东北大学计算机专业课考研试题,东北大学计算机2017-2019考研真题(2)

东北大学计算机2017-2019考研真题(2)本站小编 免费考研网/2020-02-08二、 编写算法题1.编写算法判断字符串表示的出栈入栈序列是否合法,其中A代表入栈,D代表出栈,仅有这两个字符构成。栈初始为空,例如“ADAADDDD”为非法序列,“ADAADDAD”为合法序列。(1)算法思想(2)算法实现2.编写算法判断采用二叉链表结构储存的的两颗二叉树是否相等(1)算法思想(2)算法实现3....

weixin_35110330的博客 1764

青岛大学计算机910数据结构题型精讲

青岛大学考研,910数据结构

haq987123的博客 3929
上一篇: Java 的Zip操作
DeepNightTwo
博客等级 码龄21年 3粉丝 25原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值