首页 > 其他分享 >2023.7.20 环形子数组的最大和

2023.7.20 环形子数组的最大和

时间:2023-07-20 16:12:26浏览次数:35  
标签:mut 20 nums max sum 环形 2023.7 数组 maxSum

image

求子数组最大和可以用dp解决,所以环形子数组也可以用dp解决。最简单的就是破环成链,将原数组再复制一遍然后接到尾端,然后对每个起点做一次求子数组最大和dp。
但是由于n的范围较大,这样做的时间复杂度是\(n^2\),会超时。所以必须想办法优化。

image
根据这张图,我们可以把子数组分为二种情况:

  1. 最大和的子数组在中间,即不会涉及到环形性质。
  2. 最大和的子数组是头尾相接的。

而第二种情况是可以通过图中第三个部分,来进行转换的。
所以思路就是,把原数组当成普通的求子数组最大和f1,和求子数组最小和f2。
然后第一种情况的话,答案为f1,第二种情况的话,答案就是sum - f2。两种情况取一个Max即可。

use std::cmp::{max, min};
impl Solution {
    pub fn max_subarray_sum_circular(nums: Vec<i32>) -> i32 {
        let n = nums.len();
        
        let mut sum = 0;
        let (mut maxv, mut minv) = (0, 0);
        let (mut maxSum, mut minSum) = (nums[0], nums[0]);
        for x in nums {
            sum += x;
            maxv = max(maxv + x, x);
            minv = min(minv + x, x);
            maxSum = max(maxSum, maxv);
            minSum = min(minSum, minv);
        }

        if maxSum < 0 { maxSum }
        else { max(maxSum, sum - minSum) }
    }
}

标签:mut,20,nums,max,sum,环形,2023.7,数组,maxSum
From: https://www.cnblogs.com/st0rmKR/p/17568665.html

相关文章

  • Git问题集,20190511
    来自 1、error: src refspec master does not match any执行命令git push origin master,报错,如上。http://stackoverflow.com/questions/827351/push-origin-master-error-on-new-repositoryTheerrormessageleadstotheconclusionthatyoudonothavea master......
  • 2023牛客多校7.17补题
    当时就做了两道签到题DJ,这两天补了四道简单题HKLMD-Chocolate题意:\(n×m\)的巧克力,Kelin先手,WalkAlone后手,每人每次拿走一块左下角为\((1,1)\)的子矩形的巧克力,谁拿走\((n,m)\)处的巧克力谁输。分析:这是一道结论题,只有\(1×1\)的时候后手赢,其余情况下都是先手赢。证明......
  • 【日记】2023年7月20日
    2023年7月20日晴日程安排:八点半之前到达公司,吃点早饭开始今天的学习,继续学习昨天的文档和芯片的内容。   学习内容:芯片的分类本文重点关注芯片中晶体管工作状态和电信号种类,把芯片家族粗略划分为:数字电路芯片模拟电路芯片数模混合电路芯片特种电路芯片......
  • 230720 做题记录 // 费用流练习
    A.订货http://222.180.160.110:1024/contest/3820/problem/1这个带继承关系的模型很熟悉,想到了猪那一题。所以我们试着仿照这个方式来建图。题目提到了单位费用,这简直就是直接把边的费用拍你脸上嘲讽。我们拉一个大源点,朝每个月连一条容量为无穷大、费用为购买单位费用的边......
  • Ubuntu 20.04使用 VNC远程桌面连接避坑指南
    自从开始使用Ubuntu20.04搭建深度学习服务器,就想到使用VNC远程桌面连接使用。可是之前一直使用的是Ubuntu18.04,心里想着设置应该不难,结果在配置的时候总出现无法连接的错误。下面我就分享一下我使用TigerVNC配置远程桌面连接过程中遇到的问题和解决方法。本文使用的软件版本和使......
  • 20230719-动态规划DP
    20230719数位DPP4127[AHOI2009]同类分布题目描述传送门求出[a,b]中各位数字之和能整除原数的数的个数\(a,b≤1e18\)Solution对于这种求是否能整除的题我们只有在最后才能得到答案这道题很明显是数位DP考虑用记忆化搜索来实现对于每一位我们需要维护前面的数字之......
  • 7.20日
    一、写了杭州电子科技大学的铜牌题,学了树形dp;#include<bits/stdc++.h>#defineintlonglong#definexfirst#defineysecond#defineendl'\n'#definepqpriority_queueusingnamespacestd;typedefpair<int,int>pii;vector<int>e[400010];inta[......
  • 在2023.7.20发生的一些事
    去Luogu交了一篇题解,其中关于有\(n\)层的满二叉树有一共有多少个节点的内容,一开始看错了写的是\(n^2\),审核打回说是\(2^n\),然后我又改成\(2^n\),结构审核又打回来说是\(2^n-1\)。虽然有我自己概念不清的原因在但是还是感觉有点无语(ˉ▽ˉ;).........
  • 【禅道2023年中总结】用热爱,走一些“远”路!
    相伴:开源十四载,更适合成长中企业的项目管理工具盛夏来临,2023年也过去了一半。回顾上半年,禅道团队不断突破,拥抱变化,迎接新的机遇和挑战,一些来之不易的突破,让我们惊叹、思考或感动……时光的车轮滚滚向前,14岁的禅道青春正好。这十余年间,虽然历经过波折与磨难,禅道却依然保持着顽强的......
  • 黑魂 206战斗状态管理
    在PlayerHandle里找到sensor,新建一个脚本BattleManager。在class上面加入:[RequireComponent(typeof(CapsuleCollider))]。保存之后,在sensor重新引入这个脚本就会自动创建一个胶囊体新建一个Layer叫Sensor,把sensor的Layer改成Sensor。敌人sensor的Layer也要一样: 参数都改成......