牛客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、调整场景材质增…

小抄 20240526

1 一些人焦虑的原因&#xff0c;可能是他也知道自己做的事无意义&#xff0c;但是又停不下来&#xff0c;于是一直在做无用功&#xff0c;空耗精神力量。 可以试着去做一些热爱的、有价值的事情&#xff0c;焦虑就会慢慢消失。 2 人们看历史的时候&#xff0c;很容易把自己代…

士大夫v产生的

一、前言 乱码七糟 [lun qī bā zāo]&#xff0c;我时常怀疑这个成语是来形容程序猿的&#xff01; 无论承接什么样的需求&#xff0c;是不是身边总有那么几个人代码写的烂&#xff0c;但是却时常有测试小姐姐过来聊天(_求改bug_)、有产品小伙伴送吃的(_求写需求_)、有业务小…

Java 写入 influxdb

利用Python随机生成一个1000行的csv文件 import csv import random from datetime import datetime, timedelta from random import randint, choice# 定义监控对象列表和指标名称列表 monitor_objects [Server1, Server2, Server3, DB1] metric_names [CPUUsage, MemoryUsa…

网络编程 —— Http进度条

第一种下载带进度的方法 string url "https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi"; 1使用getASync获取服务器响应数据 参数1请求的路径&#xff0c; 参数2 HttpCompletionOption.ResponseHeadersRead 请求完成时候等待请求带什么程度才…

耐高温输送带的优势

耐高温输送带&#xff1a;工业运输的革命性升级&#xff0c;助力生产线高效稳定运行 在现代化工业生产的浪潮中&#xff0c;耐高温输送带以其独特的优势&#xff0c;正逐渐成为工业运输领域的得力助手。它不仅能够有效提升生产效率&#xff0c;更能确保生产线的安全稳定运行&a…

算法随想录第二十天打卡|654.最大二叉树 , 617.合并二叉树 ,700.二叉搜索树中的搜索 , 98.验证二叉搜索树

654.最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树&#xff0c;今天做这个 应该会容易一些&#xff0c; 先看视频&#xff0c;好好体会一下 为什么构造二叉树都是 前序遍历 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;又是构…

「动态规划」打家劫舍

力扣原题链接&#xff0c;点击跳转。 有一个小偷&#xff0c;要偷东西。假设有n个房间&#xff0c;每个房间都有现金&#xff0c;下标为i的房间内的现金数是nums[i]。不能同时偷相邻的2个房间&#xff0c;其中第一个房间和最后一个房间是相邻的。那么这个小偷最多能偷到多少现…

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…

基于Fluent和深度学习算法驱动的流体力学计算与应用

“基于Fluent和深度学习算法驱动的流体力学计算与应用”专题大纲 目录 主要内容 机器学习与流体力学入门 一、流体力学基础理论与编程实战1、流体力学的发展概述 2、不可压缩流体力学的基本方程 3、湍流理论与湍流模型简介 4、傅里叶变换和流体的尺度分析 5、伪谱法求解不可压…

Vue小程序项目知识积累(二)

1.wx.reLaunch(Object object) 关闭所有页面&#xff0c;打开到应用内的某个页面。 wx.reLaunch({url:/pages/positons/index}) 参数说明&#xff1a; 属性类型默认值必填说明urlstring是需要跳转的应用内页面路径 (代码包路径)&#xff0c;路径后可以带参数。参数与路径之…

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

微信小程序的发布大小限制是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。 【开源…

如何使用jQuery重定向到另一个网页

在我们开始讨论如何重定向到另一个网页之前,必须明确一点:jQuery 是一个用于 DOM 操作的 JavaScript 库,因此你不应该使用 jQuery 来实现页面重定向。 jQuery 官方网站的某段话: 虽然 jQuery 可能能够在较旧的浏览器版本中运行,但我们并没有主动在这些版本中进行测试,也…

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

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

vue.config.js配置参考(2024-05-20)

vue.config.js 是一个可选的配置文件&#xff0c;如果项目的 (和 package.json 同级的) 根目录中存在这个文件&#xff0c;那么它会被 vue/cli-service 自动加载。 你也可以使用 package.json 中的 vue 字段&#xff0c;但是注意这种写法需要你严格遵照 JSON 的格式来写。 这…

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

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