牛客NC302 环形数组的连续子数组最大和【中等 动态规划 Java/Go/PHP/C++】

news2024/9/23 15:30:58

题目

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

思路

动态规划
两种情况(首位相连的)和首位不相连的
首尾相连的可以算最小的连续子数组得出,sum-就是。

Java代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型ArrayList
     * @return int整型
     */
    public int maxSubarraySumCircular (ArrayList<Integer> nums) {
        //动态规划
        // 两种情况(首位相连的)和首位不相连的
        // 首尾相连的可以算最小的连续子数组得出,sum-就是。
        int n = nums.size();
        int[] dpmin = new int[n];
        int[] dpmax = new int[n];
        int sum = nums.get(0);
        dpmin[0] = nums.get(0);
        dpmax[0] = nums.get(0);
        int max1 = nums.get(0);
        int min1 = nums.get(0);
        int premin = nums.get(0);
        int premax = nums.get(0);

        for (int i = 1; i < n ; i++) {
            sum += nums.get(i);
            int p1 = nums.get(i);
            int p2 = nums.get(i) + premax;
            int p3 = nums.get(i) + premin;
            int curmax = Math.max(p1, p2);
            max1 = Math.max(max1, curmax);
            premax = curmax;

            dpmax[i] = max1;


            int curmin = Math.min(p1, p3);
            min1 = Math.min(min1, curmin);

            premin = curmin;
            dpmin[i] = min1;
        }

        if (sum == min1) {
            return max1;
        } else {
            return Math.max(max1, sum - min1);
        }
    }
}

Go代码

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型
 */
func maxSubarraySumCircular(nums []int) int {
	//动态规划
	// 两种情况(首位相连的)和首位不相连的
	// 首尾相连的可以算最小的连续子数组得出,sum-就是。
	n := len(nums)
	sum := nums[0]

	dpmin := make([]int, n)
	dpmax := make([]int, n)
	dpmax[0] = nums[0]
	dpmin[0] = nums[0]
	premax := nums[0]
	premin := nums[0]
	max1 := nums[0]
	min1 := nums[0]

	for i := 1; i < n; i++ {
		sum += nums[i]
		p1 := nums[i]
		p2 := nums[i] + premax
		p3 := nums[i] + premin

		curmax := p1
		if curmax < p2 {
			curmax = p2
		}

		if max1 < curmax {
			max1 = curmax
		}

		dpmax[i] = max1
		premax = curmax

		curmin := p1
		if curmin > p3 {
			curmin = p3
		}

		if min1 > curmin {
			min1 = curmin
		}

		dpmin[i] = min1
		premin = curmin

	}

	if sum == min1 {
		return max1
	} else {
		if sum-min1 > max1 {
			return sum - min1
		} else {
			return max1
		}
	}
}

PHP代码

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
 */
function maxSubarraySumCircular( $nums )
{
     //动态规划
    // 两种情况(首位相连的)和首位不相连的
    // 首尾相连的可以算最小的连续子数组得出,sum-就是。
    $sum = $nums[0];
    $n = count($nums);
    $dpmax = [0=>$nums[0]];
    $dpmin = [0=>$nums[0]];
    $premax =$premin=$max1 =$min1 = $nums[0];

    for($i=1;$i<$n;$i++){
        $sum+=$nums[$i];
        $p1 = $nums[$i];
        $p2 = $nums[$i]+$premax;
        $p3 = $nums[$i]+$premin;

        $curmax = $p1;
        if($curmax < $p2) {
            $curmax = $p2;
        }

        if($max1 <$curmax){
            $max1 = $curmax;
        }

        $dpmax[$i] = $max1;
        $premax = $curmax;

        $curmin = $p1;
        if($curmin > $p3){
            $curmin = $p3;
        }

        if($min1 > $curmin){
            $min1 = $curmin;
        }

        $dpmin[$i] = $min1;
        $premin = $curmin;
    }

    if($sum ==$min1){
        return $max1;
    }else{
        if($max1 > $sum-$min1){
            return $max1;
        }else{
            return $sum-$min1;
        }
    }
}

C++代码

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */
    int maxSubarraySumCircular(vector<int>& nums) {
        //动态规划
        // 两种情况(首位相连的)和首位不相连的
        // 首尾相连的可以算最小的连续子数组得出,sum-就是。

        int n = nums.size();
        vector<int> dpmax(n);
        vector<int> dpmin(n);
        int  sum, max1, min1, premax, premin;
        max1 = min1 = premax = premin = sum = nums[0];
        for (int i = 1; i < n; i++) {
            sum += nums[i];
            int p1 = nums[i];
            int p2 = nums[i] + premax;
            int p3 = nums[i] + premin;
            int curmax = p1;
            if (curmax < p2) {
                curmax = p2;
            }

            if (max1 < curmax) {
                max1 = curmax;
            }

            dpmax[i] = max1;
            premax = curmax;

            int curmin = p1;
            if (curmin > p3) {
                curmin = p3;
            }

            if (min1 > curmin) {
                min1 = curmin;
            }

            dpmin[i] = min1;
            premin = curmin;
        }

        if (sum == min1) {
            return max1;
        } else {
            if (max1 > sum - min1) {
                return max1;
            } else {
                return sum - min1;
            }
        }
    }
};

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

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

相关文章

Echarts - 多个页面内有N个 echarts 图表,封装组件 CommonEcharts 快捷实现

目录 子组件父组件使用注意 option 文件效果展示相关数据处理&#xff08;代码备份 - 可不看&#xff09;数据处理后页面展示 子组件 CommonEcharts.vue <template><div><div v-for"id in domId" :id"id" :key"id" class"…

springboot+vue+mybatis校园兼职平台+PPT+论文+讲解+售后

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

十、通配符和正则表达式

10.1 通配符 通配符是由shell处理的, 它只会出现在 命令的“参数”里。当shell在“参数”中遇到了通配符 时&#xff0c;shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配&#xff1a;若符合要求的匹配存在&#xff0c;则进 行代换(路径扩展)&#xff1b;否则就将该通配…

基于springboot+vue的致远汽车租赁系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

新兴勒索软件组织不断涌现:他们是谁,如何运作

新兴的勒索软件团伙正采取不同的策略和目标&#xff0c;填补大公司关闭和执法中断所留下的空白。 3 月份 BlackCat (ALPHV) 的关闭和 2 月份执法部门对 LockBit 基础设施的干扰导致勒索软件生态系统出现空白&#xff0c;而这一空白正迅速被经验不足的团体所填补。 今年到目前…

Flask实现文件上传/下载【基础版】

目录 前言 一.文件上传 1.1一些<input>相关上传属性 1.1.1multiple 1.1.2accept 1.2Flask后台接收文件提交 1.3Flask后台接收多个文件 二.保护文件上传 2.1限制文件上传大小 2.2验证文件名 2.3验证文件内容 三.文件下载 3.1使用send_file()方法下载文件 前言…

SwiftUI中的Stepper(系统Stepper以及自定义Stepper)

本篇文章主要介绍一下Stepper&#xff0c;这个组件在UIKit中也已经有较长的历史了&#xff0c;下面看看在SwiftUI中如何使用&#xff0c;有哪些更加便捷的方法呢&#xff1f; Stepper减号(-)和加号()按钮&#xff0c;可以点击后以指定的数值进行加减。 基础初始化方法 Stepp…

【SpringCloud】服务注册与发现

目录 Eureka/注册中心简介模式 使用Eureka实现注册中心1.创建一个名称为demo-eureka-server的Spring Boot项目2.添加项目依赖3. 在启动类添加启动注解4.添加配置信息Eureka的自我保护机制为Eureka Server添加用户认证1.添加依赖2. 添加配置信息3.添加放行代码4.启动服务&#x…

NASA数据集——阿尔法喷气式大气实验甲醛(HCHO)数据

Alpha Jet Atmospheric eXperiment Formaldehyde Data 简介 阿尔法喷气式大气实验甲醛数据 阿尔法喷气式大气实验&#xff08;AJAX&#xff09;是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达和太平洋沿岸地区的…

春秋云境CVE-2018-7422

简介 WordPress Plugin Site Editor LFI 正文 1.进入靶场 2.漏洞利用 /wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/../../../../../../flag看别人wp做的。不懂怎么弄的&#xff0c;有没有大佬讲一下的

谈谈你对 vue 的理解 ?

1.谈谈你对 vue 的理解 ? 官方: Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层 2. 声明式框架 Vue 的核心特点,用起来简单。那我们就有必要知道命令式和声明式的区别! 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程 声明…

【Chrono Engine学习总结】6-创建自定义场景-6.1-3D场景获取

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 Chrono可以导入自定义的三维模型&#xff0c;所以想自己搭建一个3D仿真环境。过程中遇到了一些问题&#xff0c;记录与整理。 1、3D环境的创建方法 Chrono的Irrlich…

如何从头搭建一个自己的java库并上传到maven官方仓库

创建代码 在代码库根目录执行maven命令&#xff0c;用于快速生成一个基础的Maven项目 mvn archetype:generate \-DgroupIdcom.mycompany \-DartifactIdmy-maven-project \-Dversion1.0.0 \-DarchetypeArtifactIdmaven-archetype-quickstart \-DinteractiveModefalse 这个命令…

初学Echart

创建一个html文件 1.引入 点击链接----快速上手网址&#xff1a;快速上手 - 使用手册 - Apache ECharts 复制这一串【这个是引入echart路径】 引入到这里 2.使用 我们在上一步---点击返回--往下翻---找到完整代码--复制黏贴 复制粘贴后--总体长这样 <!DOCTYPE html> &…

【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

【学习笔记】计算机组成原理(八)

CPU 的结构和功能 文章目录 CPU 的结构和功能8.1 CPU的结构8.1.1 CPU的功能8.1.2 CPU结构框图8.1.3 CPU的寄存器8.1.4 控制单元CU和中断系统 8.2 指令周期8.2.1 指令周期的基本概念8.2.2 指令周期的数据流 8.3 指令流水8.3.1 指令流水原理8.3.2 影响流水线性能的因素8.3.3 流水…

从0开始带你成为Kafka消息中间件高手---第二讲

从0开始带你成为Kafka消息中间件高手—第二讲 那么在消费数据的时候&#xff0c;需要从磁盘文件里读取数据后通过网络发送出去&#xff0c;这个时候怎么提升性能呢&#xff1f; 首先就是利用了page cache技术&#xff0c;之前说过&#xff0c;kafka写入数据到磁盘文件的时候&…

深入探索:中文字符的编码与转移字符的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;探索字符编码的世界 二、字符编码基础&#xff1a;理解ASCII与Unicode…