给定无序整数序列,求连续子串最大和(Java实现)

n个整数中找出连续m个数加和是最大Python版 最近在看资料时看到了一个如标题所示的面试题,面试题是Java版,正好最近在学Python,就先用Python实现了。毕竟life is short,use python(玩笑话,算法设计思路是共同的,每种语言的实现方式都大同小异)。 分析: m个连续的整数加和是最大,那么最简单的实现方式就是:从下标为0查找m个元素,依次n个数组成的容器进行遍历,每次遍历判断当前最大的m个数之和,遍历结束后返回。 阅读详情

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至少是1)

输入:为整数序列,数字用空格分隔,如:-23 17 -7 11 -2 1 -34

返回:21

 

解题思路:

用curSum来统计当前子数组总和,maxSum统计目前最大的子数组最大和。如过curSum<=0,那么不管下一个数正负与否,对于我们所要的最大的子数组最大和都是不利的,所以我们需要从下一个数重新开始统计curSum;当curSum>0时,加上一个正数,那么只会让数更大,再判断与maxSum的大小看是否需要刷新maxSum的值。比如curSum=-5,加上6,只会比6小;如果为curSum=0,那么加上6,结果不变;如果为curSum=5,那么加上6,curSum更大了。

Java代码:时间复杂度O(n),空间复杂度O(1)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author Kwinz_wenkai
 * @create 2018-08-07 21:48
 * @desc    给定整数序列求连续子串最大和
 **/
public class Main {

    //求给定整数序列求连续子串最大和
    public int FindGreatestSumOfSubArray(int[] array){
        if(array == null || array.length == 0){
            return 0;
        }
        int curSum = 0;         //统计当前子数组总和
        int maxSum = array[0];  //统计目前最大的子数组最大和
        for(int i = 0; i < array.length; i++){
            if(curSum <= 0){    //如果curSum<=0,则将下一个数赋值给它,重新统计
                curSum = array[i];
            }else{              //否则继续累加array[i]
                curSum += array[i];
            }
            if(curSum > maxSum){//如果curSum大于maxSum,则刷新maxSum的值
                maxSum = curSum;
            }
        }
        return maxSum;
    }

    public static void main(String[] args){

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));// 创建输入流对象
        String input = null;
        try {
            input = reader.readLine();             // 读取一行信息
        } catch (IOException e) {
            e.printStackTrace();
        }
        String[] str = input.split(" ");    // 以空格为分隔符,转换成String数组
        int[] array = new int[str.length];        //生成一个等长的Int数组
        for (int i = 0; i < str.length; i++) {
            array[i] = Integer.parseInt(str[i]);  //将String转换成Int
        }
        Main m =new Main();
        System.out.println(m.FindGreatestSumOfSubArray(array));
        str.clone();
    }
}

 

最长公共连续子串-Java 题目描述 我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。 例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。 现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。 输入描述: 输入为两行字符... 阅读详情

相关推荐

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 926

给定无序整数序列,求连续子串最大和。

题目描述: 给定无序整数序列,求连续子串最大和,例如{-23 17 -7 11 -2 1 -34},子串为{17,-7,11},最大和为21 输入描述: 输入为整数序列,数字用空格分隔,如:-23 17 -7 11 -2 1 -34 输出描述: 输出为子序列的最大和:21 思路: 使用两个变量分别存储子数组最大的值,和当前位置子数组最大的值。遍历数组,并且每次都要判断当前最大值是否小于0,如果小于零就舍弃掉,因为会拉低后面的值。并且面次更新子数组和的最大值。 import java.util.Scanner

weixin_43815275的博客 462

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2841

算法总结:连续子串

算法总结:连续子串求子串满足某一条件的问题一般可以转化为先求以第i(0 < i <=n)个元素结尾满足该条件的解,然后将所有解加起来即可得到原问题的解。正是因为我们将以每个元素作为结尾来定义解,所以可以包含所有解,并且不会重复。例子 求一个数组中连续子数组中任何数字出现次数不大于k的所有子数组 1 2 2 4 1 答案是6 1、2、2、4、1 2、2 4 要求出所有满足条

lyx2049的博客 1691

S32K144(1)新建裸机项目以及烧录调试工程

目录 1、简介 2、S32DS新建裸机项目 2.1、新建空的项目 2.2、选择标准库的S32DS 2.3、选择使用EWL官方库 2.4、新建成功 3、烧录工程 3.1、点击Debug,选择Debug Configurations 3.2、新建GDB SEGGER J-Link Debugging 3.3、确认Project和C/C++ Applicants是需要烧写的项目名和路径正确 3.4、确认Executable Device name Interface等各个配置信息正确,后点击

朗朗上口就行啦的博客 4974

手把手教你在全新服务器内网安装OpenEuler 22.03 LTS SP4+ 安装 openGuass 5.0.0(LTS) 数据库

openEuler是面向数字基础设施的操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的开源服务器Linux操作系统。

cgqyw的专栏 3736

给定无序数组求连续字串最大和

给定无序数组,求连续字串最大和,例如{-23 17 -7 11 -2 1 -34},字串为{17 -7 11},最大和为21.//假设以上已经完成n个数的输入,放在数组a[n],以下为检索最大数串的程序 //定义变量 consecutive_num 有几个数连续 // consecutive_start 连续数起始位//定义变量 max_num 对应

shiyu16的博客 790

STM32 RT-Thread 系统分析(1)- 启动文件

RT-Thread STM32 系统分析(1)- 启动文件前言基本信息前言说明三级目录 前言 基本信息 名称 描述说明 RT-Thread Studio 软件版本 版本: 1.1.3 RT-Thread 系统版本 4.0.2 STM32CubeIDE 软件版本 1.4.0 STM32芯片型号 STM32F013VG 前言说明 使用了STM32CubeIDE 和 RT-Thread Studio 建立了相同型号芯片的工程,对比其中启动文件内容差异如下: 左侧是RT-Threa

鸳鸯冰笔的博客 4096

【算法】动态规划之连续子串

环绕字符串中唯一的子字符串 把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的: “…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” . 现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。 public static int findSubstringInWraproundString(String p) { int[] dp

GWQ_CY的博客 526

【从零开始vnpy量化投资】十一. 实盘接入测试与正式实盘

本篇主要讲解如何使用vnpy进行实盘交易,由于上一节我们已经学习了模拟盘运行,如果一切顺利的话,只需要通过穿透测试,就可以正式部署实盘了。

魔落的博客 4228

linux驱动由浅入深系列:基于高通平台分析触摸屏(TP)、虚拟按键驱动

触摸屏的触摸板(touch panel简称TP)驱动的基本架构和普通按键驱动基本一致,可以参考文章:linux驱动由浅入深系列:输入子系统之二(编写一个gpio_key驱动)。只是其功能稍稍复杂些,配置也多些,下面一起来看一下。 TP包括 触摸屏、虚拟按键、虚拟按键背光灯 TP驱动芯片厂商主要有:Goodix(汇顶),FocalTech(敦泰科技),cypress(赛普拉斯),synapt

Radia的专栏 4766

字符串中的子串问题(两种:连续子串与不连续子串)

子序列的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子序列。如“ABC”的子序列有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子序列“CHN”的个数。以下为不连续子串问题。

heliotrope_jin的博客 1225

【CASS精品教程】013:CASS9.1生成标准图幅案例教程

在CASS中,可以很方便的生成标准图幅,如50*50。本文演示cass中,根据测区范围标准图幅生成过程。

智慧空间实验室 1万+

java编程:无序整数序列,求连续子串最大和问题

给定无序整数序列,求连续子串最大和问题。

shelling_x的博客 701

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

给定整数序列求连续子串最大和

java实现 import java.util.Scanner; /** * Dynamic Programming * * State: * dp[i]: 以a[i]为结尾的连续子串的最大和 * * Initial State: * dp[0] = a[0] * * State Transition: * if (dp[i - 1] >= 0) dp[...

常cc加油 622

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

最大连续子序列(Java实现)

题目描述 给定K个整数的序列{N1,N2,...,NK},其任意连续子序列可表示为{Ni,Ni+1,...,Nj},其中1<=i<=j<=K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{-2,11,-4,13,-5,-2},其最大连续子序列为{11,-4,13},最大和为20。现在增加一个要求,即还需要...

BodyCsoulN的博客 3332

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

刷题08-求连续子序列的最大和

原题链接 题目描述 输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)。 输入描述 【重要】第一行为数组的长度N(N>=1) 接下来N行,每行一个数,代表数组的N个元素 输出描述 最大和的结果 示例 输入: 8 1 -2 3 10 -4 7 2 -5 输出: 18 说明: 最大子数组为 3, 10, -4, 7, 2 参考解法 import java.util.Scanner; /** * 参考 @SteveNolan 的解法

Awt_FuDongLai的博客 554

java无序数组找最长连续子串,给定整数序列求连续子串最大和

#includeintmax3(inta,intb,intc){if(aa=b;if(areturnc;elsereturna;}intmaxSubSum(inta[],intleft,intright){if(left==right)returna[left];inti,mid;intmaxLeftSum,maxRightSum;int...

weixin_31669073的博客 615

JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串!

在一个字符串中取得连续的子序列,并保证该序列的和为所有子序列中和为最大值。 思想:通过键盘录制获取要进行检测的数字串,其中包括正数,负数。定义一个全局变量top赋值为零,另外定义两个全局变量记录子串的位置(起始点与终点)利用循环将数组的各元素累加到top中,直到top import java.util.Scanner; //和最大的子串 public class ZichuanQiuhe {

嘻嘻的博客 3432

动态规划(4)最大连续子串问题

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个字数组。求所有子数组的和的最大值。 算法2:时间复杂度O(n*n) maxsofar=pData[0]; for i=[0,n)    sum=0;    for j=[i,n){       sum+=pData[j];  maxsofar=max(maxsofar,sum);    }//end fo

公众号(猴子数据分析) 5627

求一个整形序列,数字有正,有负数,他的最大的连续子段和?

一个整形序列(-2,1,2,3,4,2,-1,2,3,-8,1....),数字有正,有负数,求他的最大的连续子串和? 思路1: (1)找到所有的连续子串 (2)对字串求和 (3)然后比较得出最大的连续子串和 可是如何找出所有的连续子串呢?以s={-2,1,2,3}为例. 从-2开始: (1)-2 (2)-2,1 (3)-2,1,2 (4)-2,1,2,3 是s的连续...

weixin_30505225的博客 244

动态规划--最大连续子串问题

最大连续子串问题    首先,要明白子串和子序列的区别。 1)子串(Substring)是串的一个连续的部分; 2)子序列(Subsequence)则是从不改变序列的顺序,而从序列中去掉任意的元素而获得的新序列;(关于求最长子序列的算法见博客:动态规划(5)-字符串相似度算法))        最大连续子串问题是给定一组元素,求使得连续子串的值最大,比如最大连续和子串、

youwuwei2012的专栏 1115

动态规划--求最大连续子串之和

给定由n个整数(可能为负整数)组成的序列A1,A2,A3,…,An,求该序列的连续子段的和的最大值。 例如 {-4, 11,-2, 13,-7,-3,12} 的最大子段和为24JAVA代码实现:package com.example;public class 最大连续子串之和 { /** * @param args */ public static void

走别人的路,让别人无路可走!!! 1975

给出一串整数,求最大的连续子串和

给出一串整数,求最大的连续子串和

juzi_ocean的博客 604

连续子序列的最大和

题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 输入 第一行一个整数 n,代表数组元素个数。(n<=1000) 第二行 n 个空格隔开的整数。 输出 输出数组nums内一段连续子序列的最大和 样例输入 9 -2 1 -3 4 -1 2 1 -5 4 样例输出 6 import java.util.Arrays; import java.util.Scanner; public class Main { public static

Codewarning 216

最长连续升序整数序列(java版)

输入一组无序的整数(整数都大于等于0),编程求出其中最长的连续升序子序列(该序列中后一个整数比前一个整数多1,序列的长度是指序列中整数的个数,长度应大于等于2)。例如输入13个整数:3520 0 3 89 56 88 3521 9 90 1 99 2 87,其中连续升序子序列有3个:3520 3521,0 1 2 3和87 88 89 90,长度分别为2、4、4,所以后两个子序列都是最长的连续升序子序列。输入的整数个数为13,其中最长连续升序子序列的长度为4,有两个最长连续升序子序列,分别按升序分行输出。

2301_81394465的博客 276
上一篇: MySQL之SHOW语法(全)
下一篇: 滑动窗口的最大值
_睶_
博客等级 码龄10年 1685粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值