牛客NC166 连续子数组的最大和(二)【中等 前缀和数组+动态规划 Java/Go/PHP/C++】

题目

在这里插入图片描述
在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/11662ff51a714bbd8de809a89c481e21

思路

前缀和数组+动态规划

Java代码

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param array int整型一维数组* @return int整型一维数组*/public int[] FindGreatestSumOfSubArray (int[] array) {//前缀和+动态规划int n = array.length;if (n <= 1) return array;int[] presum = new int[n + 1]; //前缀和for (int i = 0; i < n; i++) {presum[i + 1] = presum[i] + array[i];}int[] dp = new int[n];dp[0] = array[0];int pre = array[0];int maxSum = array[0];int maxSumEnd = 0;//存放最的子数组和的子数组下标列表List<Integer> maxsumll = new ArrayList<>();for (int i = 1; i < n ; i++) {int p1 = array[i];int p2 = array[i] + pre;int cur = Math.max(p1, p2);//maxSum=Math.max(maxSum,cur);if (maxSum <= cur) {if (maxSum < cur) {maxsumll.clear();}maxsumll.add(i);maxSum = cur;maxSumEnd = i;}pre = cur;}//System.out.println(maxSum+", "+maxSumEnd);//System.out.println(sumIdx);int maxSize = 0;int maxSizeIdx = 0;for (Integer idx : maxsumll) {//for (int i = idx; i <=idx ; i++) {for (int j = 0; j <= idx ; j++) {if (presum[idx + 1] - presum[j] == maxSum) {//size=Math.max(size,idx+1-j);if (maxSize < idx + 1 - j) {maxSize = idx + 1 - j;maxSizeIdx = idx;}break;}//  }}}// System.out.println("size:"+ maxSize+" maxSizeidx:"+ maxSizeIdx);int[] ans = new int[maxSize];for (int i = 0; i < maxSize ; i++) {ans[i] = array[maxSizeIdx - maxSize + 1 + i];}return ans;}
}

Go代码

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param array int整型一维数组* @return int整型一维数组*/
func FindGreatestSumOfSubArray(array []int) []int {//前缀和+动态规划n := len(array)if n <= 1 {return array}presum := make([]int, n+1)for i := 0; i < n; i++ {presum[i+1] = presum[i] + array[i]}pre := array[0]maxSum := array[0]maxSumll := []int{} //存放最的子数组和的子数组下标列表for i := 1; i < n; i++ {p1 := array[i]p2 := array[i] + precur := p1if cur < p2 {cur = p2}if maxSum <= cur {if maxSum < cur {maxSumll = []int{}}maxSum = curmaxSumll = append(maxSumll, i)}pre = cur}maxSize := 0maxSizeIdx := 0for _, idx := range maxSumll {for j := 0; j <= idx; j++ {if presum[idx+1]-presum[j] == maxSum {if maxSize < idx+1-j {maxSize = idx + 1 - jmaxSizeIdx = idx}break}}}ans := make([]int, maxSize)for i := 0; i < maxSize; i++ {ans[i] = array[maxSizeIdx+1-maxSize+i]}return ans
}

PHP代码

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param array int整型一维数组 * @return int整型一维数组*/
function FindGreatestSumOfSubArray( $array )
{//前缀和+动态规划$n= count($array);if($n <=1){return $array;}$presum = [0=>0];for($i=0;$i<$n;$i++){$presum[$i+1] = $presum[$i]+$array[$i];}$pre = $array[0];$max = $array[0];$list = array(); //存放$max对应的子数组的结束下标for($i=1;$i<$n;$i++){$cur = $array[$i];$p2 = $array[$i]+$pre;if($cur < $p2){$cur = $p2;}if($max<=$cur){if($max<$cur) {$list = array();}$list[count($list)] = $i;$max = $cur;}$pre=$cur;}$maxLen =0;$maxLenIdx =0;foreach ($list as $idx){for($j=0;$j<=$idx;$j++){if($presum[$idx+1] -$presum[$j] ==$max){if($maxLen < $idx+1-$j){$maxLen = $idx+1-$j;$maxLenIdx = $idx;}break;}}}$ans=[];for($i=0;$i<$maxLen;$i++){$ans[$i] = $array[$maxLenIdx-$maxLen+1+$i];}return $ans;
}

C++代码

class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param array int整型vector* @return int整型vector*/vector<int> FindGreatestSumOfSubArray(vector<int>& array) {//前缀和+动态规划int n = array.size();if (n <= 1)return array;//前缀和vector<int> presum(n + 1, 0);for (int i = 0; i < n; i++) {presum[i + 1] = presum[i] + array[i];}int pre = array[0];int max = array[0]; //最大的子数组和vector<int> list; //存放max对应的子数组的下标列表for (int i = 1; i < n; i++) {int p1 = array[i];int p2 = array[i] + pre;int cur = p1;if (cur < p2) {cur = p2;}if (max <= cur) {if (max < cur) {list.clear();}max = cur;list.push_back(i);}pre = cur;}int maxLen = 0;int maxLenIdx = 0;for (int i = 0; i < list.size(); i++) {int idx = list[i];for (int j = 0; j <= idx; j++) {if (presum[idx + 1] - presum[j] == max) {if (maxLen < idx + 1 - j) {maxLen = idx + 1 - j;maxLenIdx = idx;}break;}}}vector<int> ans(maxLen);for (int i = 0; i < maxLen; i++) {ans[i] = array[maxLenIdx - maxLen + 1 + i];}return ans;}
};

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

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

相关文章

小短片创作-优化场景并输出短片(二)

1、什么是潮湿感 什么是潮湿感&#xff1a;基础颜色变化粗糙度变化表面渗入性 1.基础颜色变化&#xff1a;潮湿的地方颜色会变深 2.粗糙度变化&#xff1a;镜面粗糙度为0&#xff0c;潮湿的地方粗糙度会变低 3.表面渗入性&#xff1a;主要看材质是否防水 2、调整场景材质增…

YOLOv8+PyQt5鸟类检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

资源包含可视化的鸟类检测系统&#xff0c;基于最新的YOLOv8训练的鸟类检测模型&#xff0c;和基于PyQt5制作的可视化鸟类检测系统&#xff0c;包含登陆页面、注册页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的各种鸟类&#xff0c;以及自动开启摄像头…

Linux汉化Jupyter Notebook

要在Linux系统中使Jupyter Notebook汉化&#xff0c;可以通过安装jupyterlab-language-pack-zh-CN扩展来实现。以下是具体步骤和示例代码&#xff1a; 打开终端。 执行以下命令以安装Jupyter Notebook的中文语言包&#xff1a; pip install jupyterlab-language-pack-zh-CN …

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片

【CSharp】将ushort数组保存为1通道位深16bit的Tiff图片 1.背景2.接口 1.背景 System.Drawing.Common 是一个用于图像处理和图形操作的库&#xff0c;它是 System.Drawing 命名空间的一部分。由于 .NET Core 和 .NET 5 的跨平台特性&#xff0c;许多以前内置于 .NET Framework…

微信小程序上传包过大的最全解决方案!

微信小程序的发布大小限制是2MB。然而一个程序怎么能这么小&#xff1f; 介绍一下项目中的经验。 新项目 如果是刚开始做的新项目&#xff0c;一定确定好自己要用的Ui框架&#xff0c;而且确定之后&#xff0c;千万不要引入别的&#xff0c;否则占大小&#xff01;&#xff0…

HNCTF

HNCTF 文章目录 HNCTFBabyPQEZmathez_Classicf(?*?)MatrixRSABabyAESIs this Iso? BabyPQ nc签到题&#xff0c;跟端口连接拿到n和phin n 8336450100232098099043686671148282601664696810002345240872579498695511770993195704402414029892029461830476866385453475141207…

【开源】加油站管理系统 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 论坛模块 加油站模块 汽油模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《加油站管理系统》&#xff0c;包括论坛模块、加油站模块、汽油模块、加油模块和部门角色菜单模块&#xff0c;项目编号T003。 【开源…

矩阵对角化在机器学习中的奥秘与应用

在机器学习的广阔领域中&#xff0c;矩阵对角化作为一种重要的数学工具&#xff0c;扮演着不可或缺的角色。从基础的线性代数理论到复杂的机器学习算法&#xff0c;矩阵对角化都在其中发挥着重要的作用。 矩阵对角化的概念与原理 矩阵对角化是矩阵理论中的一个基本概念&#x…

综合布线管理软件有何作用?

当客户问及“综合布线管理软件究竟有何作用&#xff1f;” 我们通常这样回答&#xff1a; 综合布线管理软件&#xff0c;作为运维管理的得力助手&#xff0c;其核心功能旨在确保布线系统的稳定运行与快速响应。 首先&#xff0c;这款软件通过构建标准化的运维管理流程&#…

四川汇聚荣科技有限公司好不好?

在当今科技飞速发展的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;不仅需要先进的技术支持&#xff0c;还需要优质的服务和良好的口碑。那么&#xff0c;四川汇聚荣科技有限公司是否具备这些条件呢?接下来&#xff0c;我们将从公司实力、服务质量、客户反…

如何根据系统的业务场景需求定制自己的线程池?

如何根据系统的业务场景需求定制自己的线程池? 1、背景2、生产中应当如何使用线程池才比较合理呢?2.1、指定线程数量2.2、选择合适的工作队列2.3、自定义线程工厂2.4、选择合适的拒绝策略3、自定义线程池代码案例1、背景 线程池有那么多的参数和类型,在实际的开发中,我们应…

Java后端面经

1.可重复读&#xff0c;已提交读&#xff0c;这两个隔离级别表现的现象是什么&#xff0c;区别是什么样的&#xff1f; 可重复读&#xff1a;表示整个事务看到的事务和开启后的事务能看到的数据是一致的&#xff0c;既然数据是一致的&#xff0c;所以不存在不可重复读。而且不…

力扣算法之1045. 买下所有产品的客户

力扣传送门 题解注释 Customer表中对应的customer_id对应的product_key去重后要全部存在于Product表中的product_key 我的解 SELECT customer_id FROM Customer GROUP BY customer_id HAVING COUNT(DISTINCT product_key)(SELECT COUNT(DISTINCT product_key) FROM Product…

《java数据结构》--顺序表详解

一.顺序表的概念&#x1f649; &#x1f431;顺序表是一段物理地址连续的储存单元&#xff0c;一次储存数据元素的线性结构。一般情况下采用数组储存&#xff0c;和数组的增删查改类似。 但是顺序表和数组还是有区别的比如&#xff0c;数组按照是否可以扩容可以分为&#xff…

duckdb 插件机制研究

本文研究 duckdb 内置的 extensions 工作机制。 插件架构 在 duckdb 源码内&#xff0c;内置了一组原生插件&#xff0c;位于顶层 extension 目录下&#xff1a; 除此之外&#xff0c;还支持 Out-of-Tree Extension&#xff0c;简单说就是独立的插件&#xff0c;不是集成在源…

Star CCM+绘图显示设置

前言 如前文介绍&#xff0c;根据报告创建监视器与绘图后&#xff0c;在绘图中会出现报告绘图。此处可以自定义绘图的格式&#xff0c;如网格显示、字体大小、曲线的粗细等。同时也可以根据需要创建右坐标&#xff0c;分别监测不同类型的函数数值。为此方便后期输出仿真报告。…

哆啦AAA萌也能用HTML画出来?看这里!【完整代码可运行】

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 你是否曾经想过&#xff0c;那些可爱的哆啦A梦角色是如何被创造出来的呢&#xff1f;今天&#xff0c;我要带你一起探索一个神奇的秘密——用HTML画出哆啦A梦&#xff01; 代码 <!DOCT…

【quarkus系列】创建quarkus第一个应用程序

文章目录 序言环境准备创建项目项目分析程序代码构建访问项目 序言 Quarkus 是一个设计用于 Kubernetes 和云原生环境的 Java 框架&#xff0c;具有快速启动时间、低内存消耗和强大的开发者体验。溪源将带您一步步创建一个简单的 Quarkus 应用程序。 环境准备 在开始之前&am…

Neo4j安装部署及python连接neo4j操作

Neo4j安装部署及python连接neo4j操作 Neo4j安装和环境配置 安装依赖库&#xff1a; sudo apt-get install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y 增加Neo4 GPG key&…

为什么并行化将会是下一代的区块链解决方案?

原文标题&#xff1a;《Parallel Execution: The Next Generation of Blockchains》撰文&#xff1a;Paul Timofeev 、Mike Jin、Gabe Tramble 编译&#xff1a;Chris&#xff0c;Techub News 区块链是虚拟机&#xff0c;一种软件基础的计算模型&#xff0c;它运行在任何人都可…