【动态规划-最大子段和】力扣1191. K 次串联后最大子数组之和

news2024/9/21 12:45:53

给定一个整数数组 arr 和一个整数 k ,通过重复 k 次来修改数组。

例如,如果 arr = [1, 2] , k = 3 ,那么修改后的数组将是 [1, 2, 1, 2, 1, 2] 。

返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0,在这种情况下它的总和也是 0。

由于 结果可能会很大,需要返回的 109 + 7 的 模 。

示例 1:
输入:arr = [1,2], k = 3
输出:9

示例 2:
输入:arr = [1,-2,1], k = 5
输出:2

示例 3:
输入:arr = [-1,-2], k = 7
输出:0
在这里插入图片描述

class Solution {
public:
    int kConcatenationMaxSum(vector<int>& arr, int k) {
        int MOD = 1e9 + 7;
        long long sum = 0;
        long long maxAns = 0;
        long long pre = 0, maxMid = 0;
        for(int &num : arr){
            sum += num;
            maxAns = max(maxAns, sum);
            pre = max(pre + num, (long long)num);
            maxMid = max(maxMid, pre);
        }

        if(k == 1){
            return maxMid % MOD;
        }

        //最大后缀和
        long long maxAns2 = 0;
        long long sum2 = 0;
        for(int i = arr.size() - 1; i >= 0 ; i--){
            sum2 += arr[i];
            maxAns2 = max(maxAns2, sum2);
        }

        int theMax;
        if(sum > 0){
                theMax = max((k-2) * sum + maxAns + maxAns2, maxMid)%MOD;
        }
        else if(sum <= 0){
                theMax = max(maxMid,maxAns + maxAns2)%MOD;
        }
        return theMax;
    }
};

本题没有官解,也没有看到统一的比较好的题解。这道题主要是要考虑各种情况,可以先列出所有的情况,最后再进行代码优化,将类似的情况整理在一起。maxMid是最大子段和,使用的是Kadane算法,maxAns是最大前缀和,maxAns2是最大后缀和。首先如果当k为1的时候,最大子段和就是maxMid。接下来讨论sum的情况,如果sum>0,就要比较两种情况,一种是复制的2到k-1组元素的和加上第一组元素的最大后缀和再加上最后一组元素的最大前缀和,第二种情况是第一组元素中的最大子段和就是整个复制过的数组的最大子段和。当sum<=0的时候,也要比较两种情况哪个大,第一种是第一组元素中的最大子段和,第二种是最大前缀和加上最大后缀和(例如第一组元素的最大后缀和加上第二组元素的最大前缀和)。

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

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

相关文章

Delphi5实现多窗体

效果图 新建窗体 窗体的显现 procedure TForm2.btn2Click(Sender: TObject); beginForm1.Show;Form2.Hide; end;第一个窗体完整代码 注意引用第二个窗体 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, Forms,Form…

《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端

引出 《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端 第3集&#xff1a;2000年代/数据库分型及国产数据库开端 y2k问题 千年虫&#xff0c;又叫做“计算机2000年问题”“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K]”。是指在某些使用了计算机…

ESP8266 完结日志 2024/8/2 23:50

呼!经历这么长 的时间终于完工了, 从零开始一步一步走过来,还是有一丢丢成就感的 功能: 上传文件 控制引脚 获取信息 重启设备 清空flash 期间接触:web开发 uni-app开发 c开发 python 开发 MQTT AI很棒,棒到我任何问题都想问AI, 甚至一丢丢逻辑下的操作都期盼AI解决. 抖音也…

yolov5的学习part1

还是基础的anoconda&#xff0c;在opencv的时候就已经安装过了 此视频疑似在2020年底录制&#xff0c;因为他安装anaconda使用如下代码 bash ~/Downloads/Anaconda3-2020.07-Linux-x86_64.sh 由于版本兼容问题&#xff0c;可能要mini conda PASCAL VOC PASCAL VOC挑战赛在…

Node.js(6)——npm软件包管理

npm npm是Node.js标准的软件包管理器。 使用&#xff1a; 初始化清单文件&#xff1a;npm init-y(得到package.json文件&#xff0c;有则略过此命令)下载软件包&#xff1a;npm i 软件包名称使用软件包 示例&#xff1a; 初始状态下npm文件夹下只有server.js,下载软件包前看…

揭秘最“硬”的物质,你听说过神秘的“0”号元素吗?

“尽管我们还没有找到它,但这并不意味着它不存在。”——斯蒂芬威廉霍金 亲爱的朋友们,今天我们来探讨一个引人入胜的话题——宇宙中最坚硬的物质是什么?别急,这不是去健身房的邀请,而是一次探索宇宙奥秘的旅程。听说过神秘的“0”号元素吗?让我们一探究竟! 在浩瀚的宇…

unity2D游戏开发12单例

单例 我们先了解一种被称为单例的软件设计模式。当应用程序需要在生命周期内创建特定类的单个实例时,可以使用单例。当一个类提供了游戏中其他几个类使用的功能时,单例会很有用,例如,在Game Manager 类中协调游戏逻辑,单例可以提供对该类及其功能的公共统一访问入口。单例…

C++客户端Qt开发——多线程编程(一)

多线程编程&#xff08;一&#xff09; ①QThread 在Qt中&#xff0c;多线程的处理一般是通过QThread类来实现。 QThread代表一个在应用程序中可以独立控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 QThread对象管理程序中的一个控制线程。 run() 线程的入口…

用Python插入表格到PowerPoint演示文稿

有效的信息传达是演示文稿中的重点&#xff0c;而PowerPoint演示文稿作为最广泛使用的演示工具之一&#xff0c;提供了丰富的功能来帮助演讲者实现这一目标。其中&#xff0c;在演示文稿中插入表格可以帮助观众更直观地理解数据和比较信息。通过使用Python这样的强大编程语言&a…

前端优化之图片的渐进式加载

起因&#xff1a; 在访问自己部署的前端项目的时候发现&#xff0c;背景图片加载太慢&#xff0c;并不是很美观。 这是因为&#xff0c;除了 JavaScript 和 CSS&#xff0c;网站通常还会包含大量的图片。当自己把<img> 元素添加到网站里面时&#xff0c;对应的所有图片…

计算机网络-基于PIM-DM+IGMP的组播实验配置

前面我们将IGMP协议和PIM-DM协议理论知识都学完了&#xff0c;现在开始进入实践&#xff0c;毕竟只有完成实践是最好的检验方式。IGMP是用于感知组播组成员&#xff0c;而PIM-DM是用于在域内构建组播分发树的的协议&#xff0c;本次实验使用这两项技术进行分析与实践。 一、拓扑…

操作系统与进程简单介绍

操作系统与进程 操作系统进程 操作系统 上一篇博客中介绍了操作系统到底层硬件它们之间的一个关系&#xff0c;那么还是这张图 操作系统到用户它们之间的关系又是如何的呢&#xff1f; 又回到了最根本的问题上&#xff1a;为什么要有操作系统呢&#xff1f; 1、向下管理好软…

jQuery入门(五)Ajax和json

一、Ajax 简介 AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。 本身不是一种新技术&#xff0c;而是多个技术综合。用于快速创建动态网页的技术。 一般的网页如果需要更新内容&#xff0c;必需重新加载个页面。 而 AJAX 通过浏览器与服务器进行…

一篇文章读懂抖音短视频矩阵系统:核心功能与优势分析

抖音短视频矩阵系统作为当下备受欢迎的内容创作与分发平台&#xff0c;已经吸引了大量用户和创作者的关注。本文将详细介绍抖音短视频矩阵系统的核心功能与优势&#xff0c;帮助您全面了解这一强大的内容创作工具。 1. 抖音短视频矩阵系统 抖音短视频矩阵系统是一个集创作、编…

【Hot100】LeetCode—287. 寻找重复数

目录 题目1- 思路2- 实现⭐287. 寻找重复数——题解思路 3- ACM 实现 题目 原题连接&#xff1a;287. 寻找重复数 1- 思路 快慢指针 2- 实现 ⭐287. 寻找重复数——题解思路 class Solution {public int findDuplicate(int[] nums) {int slow nums[0];int fast nums[0];//…

DB-Engines Ranking 2024年8月数据库排行

DB-Engines Ranking 2024年8月数据库排行 DB-Engines排名根据数据库管理系统的受欢迎程度进行排名。排名每月更新一次。 2024年8月&#xff0c;共有423个数据库进入排行。 排行榜 前15名趋势图 关系型数据库前 10 名 键值数据库前 10 名 文档数据库前 10 名 时序数据库前 10 …

从0到1:构建高性能的视频美颜SDK和直播美颜插件

本篇文章&#xff0c;笔者将探讨如何从0到1&#xff0c;构建一个高性能的视频美颜SDK和直播美颜插件&#xff0c;助力开发者打造出色的产品。 1.需求分析与技术选型 通常情况下&#xff0c;视频美颜功能需要包括基础的滤镜效果、磨皮美白、面部特征优化等。这些功能既要保证实…

C++入门级文章

一、一个用于查询C标准库内函数、操作符等的链接 https://legacy.cplusplus.com/reference/ 声明&#xff1a;该文档并非官方文档&#xff0c;但其具有易于查询和使用的优势&#xff0c;足够日常使用。 二、C的第一个程序 1、C语言中的语法在C中仍旧适用&#xff0c;首先我们来…

书生大模型学习笔记 - Python

Python实现wordcount 请实现一个wordcount函数&#xff0c;统计英文字符串中每个单词出现的次数。返回一个字典&#xff0c;key为单词&#xff0c;value为对应单词出现的次数。 解题思路&#xff1a;首先把字母转小写>然后把单词取出来去除标点>循环单词列表>key已存…

老板让你点评网页UI,你却不知道如何说起……

当评价网页UI设计时&#xff0c;可以参考以下几个标准&#xff1a; 1. 一致性&#xff08;Consistency&#xff09;&#xff1a; 一个优秀的网页UI应该保持一致性&#xff0c;即在整个网页中使用相同的设计元素和样式&#xff0c;如颜色、字体、按钮样式等。这样可以增加用户…