数据结构基础:P1-基本概念----编程作业02:Maximum Subsequence Sum

news2024/11/19 14:44:30

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记,前面文章链接如下
数据结构基础:P1-基本概念
数据结构基础:P1-基本概念----编程作业01:最大子列和问题

文章目录

  • 一、题目描述
  • 二、代码实现


一、题目描述

题目描述: 给定K个整数组成的序列 { N 1 , N 2 , . . . , N k } \{ {N_1},{N_2},...,{N_k}\} {N1,N2,...,Nk} ,连续子列被定义为 { N i , N i + 1 , . . . , N j } \{ {N_i},{N_{i + 1}},...,{N_j}\} {Ni,Ni+1,...,Nj},其中 1 ≤ i ≤ j ≤ K 1 \le i \le j \le K 1ijK。最大子列和则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和,同时将最大子列的首尾元素打印出来。
输入格式:
输入第1行给出正整数 K ( ≤ 100000 ) K (≤100000) K(100000);第2行给出 K K K 个整数,其间以空格分隔。
输出格式:
对于每个测试案例,在一行中输出最大的子列和、最大子序列的首尾元素。这些数字之间必须有一个空格,但在行末不能有多余的空格。如果最大子序列不是唯一的,则输出具有最小元素下标 i i i j j j 的子序列(如示例案例所示)。如果这K个数字都是负数,那么它的最大和被定义为0,你应该输出整个序列的第一个和最后一个数字
输入样例:
10
-10 1 2 3 4 -5 -23 3 7 -21
输出样例:
10 1 4


二、代码实现

思路分析

本题是对前面最大子列和问题的扩展,需要我们额外输出最大子列的首尾元素。在线处理复杂度为 O ( N ) \rm{O(N)} O(N),因此我们采用该算法。
①遍历数组A,令当前子列加上A[i]。
②若当前子列和小于0,则说明A[i]无法为当前子列带来收益,于是抛弃A[i],继续向后看:
----将当前子列和重置为0
----将i+1记录为临时首,后面更新时要用到
③若当前子列和不小于0且大于最大子列和,则说明A[i]可以为当前子列带来收益,于是更新:
----将最大子列和更新为当前子列和
----A[i]就是最大子列的尾
----将最大子列的首更新为前面记录的值

代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//在线处理。算法复杂度:O(N)
void MaxSubseqSum(int A[], int N)
{
	int MaxSum = 0, ThisSum = 0;               //最大子列和、当前子列和
	int Left = 0, Right = 0, LeftTemp = 0;     //最大子列的首、尾、临时首
	for (int i = 0; i < N; i++) {
		ThisSum += A[i];     
		if (ThisSum < 0) {   //当前子列加上A[i]后小于0
			LeftTemp = i+1;  //抛弃A[i],将最大子列的首往右移动一位
			ThisSum = 0;     //抛弃A[i],将最大子列和设置为0
		}
		else if (ThisSum > MaxSum) { //当前子列和大于最大子列和
			MaxSum = ThisSum;        //更新最大子列和
			Right = i;				 //A[i]就是最大子列的尾
			Left = LeftTemp;         //更新最大子列的首
		}
	}
	if(MaxSum < 0)
		printf("0 %d %d\n", A[0], A[N-1]);
	else
		printf("%d %d %d\n", MaxSum, A[Left], A[Right]);
}

int main()
{
	int Array[10000];
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &Array[i]);
	}

	MaxSubseqSum(Array, n);

	return 0;
}

运行,输入测试样例,结果正确。
在这里插入图片描述

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

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

相关文章

【408篇】C语言笔记-第十九章(C语言语法进阶)

文章目录第一节&#xff1a;条件运算符与逗号运算符1. 条件运算符2. 逗号运算符第二节&#xff1a;自增自减运算符1. 自增自减运算符2. 自增自减运算符与取值运算符第三节&#xff1a;位运算符1. 位运算符2. 异或运算符实例解析第四节&#xff1a;switch和do while讲解1. switc…

使用Bigemap计算挖填土石方量

1、 Bigemap GIS Office 第一步&#xff1a; 用Bigemap GIS Office导出待计算区域的高程数据&#xff1a; 1.1 打开Bigemap GIS Office选择目标区域&#xff1a;如下图&#xff1a; 1.2选择的目标区域的高程数据&#xff08;NASA, TIF, 高精度高程数据&#xff09; 1…

【SSM框架】MyBatis核心配置文件详解

1.MyBatis核心配置文件之environments <!--environments&#xff1a;配置多个连接数据库的环境 属性&#xff1a;default&#xff1a;设置默认使用的环境的id --><environments default"development"><!--environment&#xff1a;配置某个具体的环境 …

C++ opencv形态学、轮廓查找、特征检测和图像分割

C opencv形态学、轮廓查找、特征检测和图像分割形态学基本处理方法二值化全局二值化局部二值化腐蚀和膨胀图像形态学运算开运算闭运算顶帽黑帽代码图像轮廓寻找轮廓绘画轮廓轮廓的面积和周长多边形逼近和凸包多边形逼近凸包外接矩形最小外接矩形最大外接矩形案例车辆检测&#…

召回和排序模型中的用户行为序列的建模

1. 概述 用户在使用一个APP或者浏览网页的过程中&#xff0c;都是由一些行为构成的&#xff0c;以资讯类为例&#xff0c;通常对一个帖子感兴趣&#xff0c;对于感兴趣的帖子&#xff0c;通常会点击进入查看&#xff0c;或者点击收藏或者对其进行评论&#xff0c;这一系列行为…

电脑录屏怎么录全屏?win10电脑如何录屏

随着互联网的发展&#xff0c;线上办公以及网课越来越频繁&#xff1b;线上办公或者网课都是使用电脑来完成工作和学习的&#xff1b;那Win10电脑如何录屏以及电脑录屏怎么录屏全屏呢&#xff1f;接下来给大家分享三个电脑录制全屏的教程方法给大家&#xff1b; win10录制全屏方…

【MySQL】绿色版下载配置教程(Windows)

文章目录下载MySQL压缩包1 创建my.ini文件2 配置mysql环境变量3 在终端执行命令下载MySQL压缩包 https://dev.mysql.com/downloads/mysql/ 1 创建my.ini文件 模板内容如下 [mysqld] basedir D:\\Program Files\\mysql # 设置mysql的安装目录 datadir D:\\Program Files\\m…

红黑树简介

一、红黑树 1、概念 红黑树&#xff08;Red Black Tree&#xff09; 是一种自平衡二叉搜索树。它在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red或 Black。 通过任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其…

为什么生产MES系统对工厂管理如此重要?

随着生产业务、计算机技术的发展&#xff0c;MES管理系统的定义也是在不断的变化。但是&#xff0c;计划调度、质量管理、生产执行以及数据&#xff08;设备&#xff0c;产品信息&#xff09;采集&#xff0c;一直都是MES的核心功能。 工业物联网&#xff0c;对于制造业来说并…

数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)

顺序表的顺序存储&#xff08;增删查&#xff09; #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int ElemType;//保证顺序表可以存储任何类型 //静态分配 typedef struct{ ElemType data[MaxSize];//定义的数组&#xff0c;用来存元素…

MergeTree写入查询流程分析

基础概念回顾 前面几节我们分别详细分析了分区&#xff0c;索引&#xff0c;数据存储相关原理&#xff0c;这些组件配合在一起给Clickhouse数据库带来非常高效的查询性能。前面的文章也单独介绍了这几个组件。接下来&#xff0c;就分别从写入过程、查询过程&#xff0c;以及数…

数字孪生水电站,三维组态助力发电流程优化

从大禹治水到三峡大坝的建造&#xff0c;人类为控制和调配自然界的地表水和地下水&#xff0c;修建了许多的水利工程。对水资源进行了广泛的开发利用&#xff0c;诸如农业灌溉、工业和生活用水、水力发电、航运、港口运输、淡水养殖、旅游等。 将图扑软件与 GIS、粒子仿真、虚拟…

在re:Invent 2022大会打球、喝酒?没错!

编辑&#xff5c;阿冒虽然距离去拉斯维加斯参加亚马逊云科技re:Invent 2022大会&#xff0c;差不多已经过去了一个月&#xff0c;不过时不时仍有熟稔的朋友来问我&#xff0c;你在展区球场上如何如何&#xff0c;巴拉巴拉……为啥他们对我的行动如此了解&#xff1f;其实&#…

effective C++读书笔记

目录 用const,enum,inline去替换#define 尽可能去使用const 确保对象使用前已被初始化 这是effective C中的第一大章节&#xff1a;让自己习惯c 用const,enum,inline去替换#define 当用使用这样的代码&#xff1a; #define ASPECT RATIO 1.653 记号名称ASPECT RATIO可能未…

图像风格迁移---基于多适应网络的任意风格传输

ABSTRACT 任意风格转换是一个具有研究价值和应用前景的重要课题。给定一个内容图像和引用的风格绘画&#xff0c;一个所需的风格转换将使用风格绘画的色彩色调和生动的笔画模式渲染内容图像&#xff0c;同时保持详细的内容结构信息。风格迁移方法首先学习内容和内容和风格引用…

推荐系统的矩阵分解

0 序言 推荐系统中基于内容的协调过滤算法通过用户之间的相似性或者物品之间的相似性&#xff0c;通过相似性来为用户做决策和推荐&#xff1b;基于内容的协调过滤算法在实际生产环境中&#xff0c;User或Item的数据量非常大&#xff08;百万级别&#xff09;&#xff0c;存储…

操作系统期末考试必会题库3——处理机调度

1、假设一个系统中有5个进程&#xff0c;它们处于就绪状态的时刻和估计运行时间如下表所示&#xff0c;忽略I/O以及其它开销时间&#xff0c;若分别按先来先服务&#xff0c;最短进程优先&#xff0c;最短剩余时间优先、响应比优先、时间片轮转&#xff08;时间片&#xff1d;1…

世界杯 | 其实世界杯结束之前,卡塔尔就开拆体育场了...

大家好&#xff0c;这里又是建模助手。 世界杯已经圆满落幕&#xff0c;梅老板满载而归&#xff0c;但阿根廷与法国的这场世界杯决赛注定载入史册&#xff0c;成为永恒经典&#xff0c;或许将会是世界杯历史上最精彩的决赛之一。 &#xff08;梅老板捧起大力神杯那一刻&#x…

人工鱼群算法参数寻优及可视化(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 人工鱼群优化算法是一种基于模拟鱼群行为的优化算法&#xff0c;是由李晓磊等在2002年提出的一种新型的寻优算法。人工鱼群主要…

黑马Hive+Spark离线数仓工业项目--数仓事实层DWB层构建(1)

整体目标&#xff1a;构建数仓中的DWB&#xff1a;主题事务事实表 核心的主题事实的构建&#xff1a;SQL实现 主题的指标 原始事务事实数据【DWD】&#xff1a;订单数据 主题事务事实数据【DWB】&#xff1a;订单主题 - 主题周期快照事实表&#xff1a;数据应用层【ST&#…