前置知识: 讲解005-对数器 讲解046-构建前缀信息的技巧 讲解054-单调队列,一定要掌握,本节课题目6需要,后续讲“多重背包的单调队列优化”也需要 讲解070-子数组最大累加和问题与扩展-上 【必备】课程的动态规划大专题从讲解066开始,建议从头开始学习会比较系统
本节课是上节课内容的继续,见识更多与累加和相关的题目 而且有4个题来自真实大厂笔试题,都提供了对数器的验证代码来确保正确 很多解法的思路非常巧妙
题目1 乘积最大子数组 给你一个double类型数组 nums 请你找出数组中乘积最大的非空连续子数组 并返回该子数组所对应的乘积 测试链接 : https://leetcode.cn/problems/maximum-product-subarray/
注意: 题目中虽然给定的是int类型的数组 但讲述的方法是int、double类型的数组都能正确的做法
题目2 子序列累加和必须被7整除的最大累加和 给定一个非负数组nums, 可以任意选择数字组成子序列,但是子序列的累加和必须被7整除 返回最大累加和 对数器验证
题目3 魔法卷轴 给定一个数组nums,其中可能有正、负、0 每个魔法卷轴可以把nums中连续的一段全变成0 你希望数组整体的累加和尽可能大 卷轴使不使用、使用多少随意,但一共只有2个魔法卷轴 请返回数组尽可能大的累加和 对数器验证
题目4 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k 找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组 并返回这三个子数组 以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置 如果有多个结果,返回字典序最小的一个 测试链接 : https://leetcode.cn/problems/maximum-sum-of-3-non-overlapping-subarrays/
题目5 可以翻转1次的情况下子数组最大累加和 给定一个数组nums, 现在允许你随意选择数组连续一段进行翻转,也就是子数组逆序的调整 比如翻转[1,2,3,4,5,6]的[2~4]范围,得到的是[1,2,5,4,3,6] 返回必须随意翻转1次之后,子数组的最大累加和 对数器验证
题目6 删掉1个数字后长度为k的子数组最大累加和 给定一个数组nums,求必须删除一个数字后的新数组中 长度为k的子数组最大累加和,删除哪个数字随意 对数器验证
注意: 确保 讲解054-单调队列 已经掌握,不然会听不懂
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com