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

题目

在这里插入图片描述
题目链接:
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;
            }
        }
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第20届文博会:“特别呈现”—周瑛瑾雷米·艾融双个展,著名美术评论家,批评家彭德教授对周瑛瑾作品进行评论

周瑛瑾不是学院派艺术家&#xff0c;但在彩墨画领域的天赋超出中国八大美院的同类型画家。相比具有批判意识的当代艺术&#xff0c;他的彩墨艺术如同我们这个苦难世界的创可贴和安慰剂。当我面对他的彩墨画&#xff0c;首先是惊艳&#xff0c;随之想到屈原的离骚&#xff0c;还…

slint esp32 tokio

源码&#xff1a;https://github.com/xiaguangbo/slint_esp32_tokio cpu 是 esp32c2&#xff0c;屏幕是 ili9341&#xff0c;触摸是 xpt2046&#xff0c;使用 spi 半双工 不使用DMA&#xff08;esp-rs还没支持&#xff09;&#xff0c;SPI 40M&#xff0c;240*320全屏刷新为1.5…

Windows、Linux下,基于QT的打包方法

整理这篇文档的意义在于&#xff1a;自己走了很多弯路&#xff0c;淋过雨所以想为别人撑伞&#xff0c;也方便回顾&#xff0c;仅供参考 ps: 第一次做Windows下打包&#xff0c;用了2小时&#xff0c;第二次20秒第一次做Linux(ubuntu)下打包&#xff0c;用了8小时&#xff0c;…

Linux 内核

查看内核的发行版 $ uname -r 5.4.0-150-genericcd /lib/modules/5.4.0-150-generic, 内核源码所在的位置&#xff1a;/usr/src 这里的内核源码路径&#xff08;–kernel-source-path&#xff09;即为&#xff1a; cd /usr/src/linux-headers-5.4.0-150-generic/ 临时生效: …

JMETER工具:以录制手机app为例

JMETER工具&#xff1a;以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk&#xff0c;并进行jdk的环境配置&#xff0c;安装好jdk并配置好后&#xff0c;通过命令行输入java –version出现以下界面就表示安装成功&#xff1a; &#xff08;对应的jdk版本不可太低&…

网络通信(二)

UDP通信 特点&#xff1a;无连不是先接、不可靠通信 不事先建立连接&#xff1b;发送端每次把要发送的数据&#xff08;限制在64KB内&#xff09;、接收端IP、等信息封装成一个数据包&#xff0c;发出去就不管了 java提供了一个java.net.DatagramSocket类来实现UDP通信 Dat…

第13章-循迹功能 循迹小车讲解 原理分析 STM32智能小车循迹教程 红外对管使用 PID循迹算法分析

讲解一下我们小车里面的循迹部分&#xff0c;包括红外基础使用&#xff0c;无PID循迹和有PID循迹。 第13章-循迹功能 13.1-非PID循迹功能完成 先红外对管调试 我们这里学习一下&#xff0c;如何实现循迹功能 如何才能让小车沿着黑线运动、要让小车感知到黑线的位置&#x…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f33c;前言 &#x1f512;单机环境下防止接口重复提交 &#x1f4d5;导入依赖 &#x1f4c2;项目结构 &#x1f680;创建自定义注解 ✈创建AOP切面 &#x1f697;创建Conotroller &#x1f4bb;分布…

[CISCN 2024] Crypto部分复现

文章目录 OvOez_rsacheckin浅记一下 迟来的文章 OvO 题目描述&#xff1a; from Crypto.Util.number import * from secret import flagnbits 512 p getPrime(nbits) q getPrime(nbits) n p * q phi (p-1) * (q-1) while True:kk getPrime(128)rr kk 2e 65537 kk …

3d打印问题总结

1.打印拉丝&#xff1a;https://zhuanlan.zhihu.com/p/152221550 解决方案&#xff1a;温度过高&#xff0c;PLA材料材料喷嘴温度一般设置为200度比较合适。

string OJ题

下面分享一下string做题心得 1. 明白字符串中存储的数字为0 8 9与0 8 9 完全不同&#xff0c;字符0其实在串中存储的是48&#xff0c;要有意识的转化。字符串中如果存数字8&#xff0c;意味着存了BS&#xff08;退格&#xff09; 例如1&#xff1a; 算出结果为5&#xff0c;存…

网上打印试卷的步骤是什么

对于学生和家长来说&#xff0c;打印试卷是日常学习中的一项重要需求。那么&#xff0c;如何在网上方便地打印试卷呢&#xff1f;下面&#xff0c;就让我来为您介绍琢贝云打印的试卷打印步骤。 一、选择琢贝云打印的原因 支持多种文件格式打印&#xff0c;包括图片、PPT、PDF、…

20.SkyWalking

一.简介 SkyWalking用于应用性能监控、分布式链路跟踪、诊断&#xff1a; 参考连接如下&#xff1a; https://github.com/apache/skywalking https://skywalking.apache.org/docs/ 二.示例 通过官网连接进入下载页面&#xff1a;https://archive.apache.org/dist/skywalkin…

2024年【T电梯修理】考试内容及T电梯修理新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】考试内容及T电梯修理新版试题&#xff0c;包含T电梯修理考试内容答案和解析及T电梯修理新版试题练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总&#xff0c;…

k8s中yaml文件配置指定私有镜像仓库

1. yaml文件介绍 2. 如何快速编写yaml文件 1&#xff09;如果有已存在的pod时可以 kubectl get pod xxxxxx -oyaml 2&#xff09;直接假跑一次并查看 kubectl run xxxxxx --image镜像名 --dry-run -oyaml 3&#xff09;查看pod相关描述信息 kubectl explain pod 3. 编写…

linux 安装redis 并设置开机启动

个人实测 流程 1、第一步 先下载redis ** redis地址 https://download.redis.io/releases/选择你想要的版本 我下载的是 如下图 2、第二步:把下载的包放到linux里面 我用的是 XSHELL 和XFTP 放到/usr/local/java路径下 你可以随便放 3、第三步: ** 执行 以下命令 进行解压 t…

js之图表使用

今天为了给大家演示图表的使用,今天展示下切换图形的修改属性快速修改 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"./js/jquery-3.7.1.js"></script><script src…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

flash-linear-attention中的Chunkwise并行算法的理解

这里提一下&#xff0c;我维护的几三个记录个人学习笔记以及社区中其它大佬们的优秀博客链接的仓库都获得了不少star&#xff0c;感谢读者们的认可&#xff0c;我也会继续在开源社区多做贡献。github主页&#xff1a;https://github.com/BBuf &#xff0c;欢迎来踩 0x0. 前言 …

老外卖27刀每月的教程已经更新

用了两天半的时间&#xff0c;边学习&#xff0c;边整理了一份老外的视频教程&#xff0c;涉及Facebook&#xff0c;YouTube&#xff0c;tiktok等大的流量平台&#xff0c;有案例&#xff0c;有分析&#xff0c;有如何做。 这个教程是老外讲的&#xff0c;没有什么玄乎的塑造价…