牛客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.pswp.cn/bicheng/17257.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17257.shtml
英文地址,請注明出處:http://en.pswp.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;這款軟件通過構建標準化的運維管理流程&#…