最大子列和问题(同时输出有最大和的子列的首尾元素)【数据结构测试1.2】

2024-01-22 10:08

本文主要是介绍最大子列和问题(同时输出有最大和的子列的首尾元素)【数据结构测试1.2】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1 <= i <= j <= K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.


Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:
Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (<= 10000). The second line contains K numbers, separated by a space.

Output Specification:
For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:
10
-10 1 2 3 4 -5 -23 3 7 -21
Sample Output:

10 1 4


PS:标明注意的部分部分比较容易忽略,一开始反复提交都是部分正确,就是因为少了这种特例的判断

测试程序:

// maxSubSum.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include <vector>
using namespace std;int str_pnt[2] = {0}, end_pnt = 0;//开始点,结束点
/*
修改最大子列和程序,记录有最大和的子列的首尾*/
long maxSubsum(vector<int> &a)
{int maxSum = 0,thisSum = 0;for(int i = 0; i < a.size(); i++){thisSum += a[i];if(thisSum >= maxSum){maxSum = thisSum;end_pnt = i;//每次更新max的时候更新结束点位置str_pnt[0]  =  str_pnt[1];}else if(thisSum == 0 && maxSum == 0)//此处注意:处理序列类似[-1 0 -2]的这种情况(此种情况应该输出0 0 0,无此条件则会输出0 -1 -1){end_pnt = i;//每次更新max的时候更新结束点位置str_pnt[0]  =  str_pnt[1];}else if(thisSum < 0){thisSum = 0;str_pnt[1] = i+1;//若子序列移动,更新开始点位置(保存此时位置)}}return maxSum;
}int main()
{int n = 0,i = 0;int flag = 0;//是否有非负数标志位fstream cin("a.txt");cin >> n;while(!cin.eof()){vector<int> a(n);while(n--){cin >> a[i];if(a[i] >= 0)flag = 1;i++;}i = 0;cout << maxSubsum(a);if(! flag )//若整个序列均为负数cout<<" "<<a[0]<<" "<<a[a.size()-1]<<endl;elsecout <<" "<< a[str_pnt[0]] << " " << a[end_pnt] <<endl;cin >> n;//清零str_pnt[0] = str_pnt[1] = 0;end_pnt = 0;a.clear();}return 0;
}

以上程序测试数据:(a.txt)

6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
3
-1 -5 -2
3
-1 0 -2
1
10



提交到OJ的代码:

int main()
{int n = 0,i = 0;int flag = 0;cin >> n;vector<int> a(n);while(n--){cin >> a[i];if(a[i] >= 0)flag = 1;i++;}cout << maxSubsum(a);if(! flag )//若整个序列均为负数cout<<" "<<a[0]<<" "<<a[a.size()-1]<<endl;elsecout <<" "<< a[str_pnt[0]] << " " << a[end_pnt] <<endl;return 0;
}



这篇关于最大子列和问题(同时输出有最大和的子列的首尾元素)【数据结构测试1.2】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632650

相关文章

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表