首页 > 其他分享 >力扣---1043. 分隔数组以得到最大和

力扣---1043. 分隔数组以得到最大和

时间:2023-04-19 20:59:37浏览次数:41  
标签:1043 力扣 arr int max 最大值 --- 数组 dp

 给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。

返回将数组分隔变换后能够得到的元素最大和。本题所用到的测试用例会确保答案是一个 32 位整数。

 

示例 1:

输入:arr = [1,15,7,9,2,5,10], k = 3
输出:84
解释:数组变为 [15,15,15,9,10,10,10]

示例 2:

输入:arr = [1,4,1,5,7,3,6,1,9,9,3], k = 4
输出:83

示例 3:

输入:arr = [1], k = 1
输出:1

 

提示:

  • 1 <= arr.length <= 500
  • 0 <= arr[i] <= 109
  • 1 <= k <= arr.length

题目有点绕,实际上就是给你一个数组,你可以将这个数组分成长度最大不超过 k 的若干个连续的子数组,并用这些子数组中的最大值代替其他的元素,求代替之后所有元素之和的最大值。

可以想到,第 i 个位置的最大值可以由它前面 k 个对应位置的最大值加上这段数组中的最大值乘以出现次数来得出。

当 k 等于 2 时,实际上就变成了爬楼梯。

k 等于其他数时,就是一次能爬更多台阶的爬楼梯。

class Solution {
    public int maxSumAfterPartitioning(int[] arr, int k) {
        int len = arr.length;
//        动态规划数组
        int[] dp = new int[len + 1];
        for (int i = 1; i <= len; i ++) {
            int max = arr[i - 1];
//            由于是将中间位置的最大值全部添到中间数组中,从后往前不会错过当前的最大值。
            for (int j = 1; j <= k; j ++) {
                if (i - j >= 0) {
                    max = Math.max(max, arr[i - j]);
                    dp[i] = Math.max(dp[i], dp[i - j] + max * j);
                }
            }
        }
        return dp[len];
    }
}

 

标签:1043,力扣,arr,int,max,最大值,---,数组,dp
From: https://www.cnblogs.com/allWu/p/17334558.html

相关文章

  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之008 week01 02-08 通过常见算法,对常
    1、线性查找法的复杂度publicstatic<E>intsearch(E[]data,Etarget){for(inti=0;i<data.length;i++)if(data[i].equals(target))returni;return-1;}很容易看出,这个算法的复杂度为O(n)。2、一个数组中的元素可以两两组成......
  • 中!新一代【WRITE-BUG】数字空间,好使!
    【WRITE-BUG】数字空间是一个为大学生提供知识管理和交流的平台,提供了多种实用的功能。该平台的界面设计符合大学生的审美,功能也非常完备。数字空间的主要功能包括聊天大厅、云文档、云批注笔记、代码仓库以及代码质量评估系统等。作为数字空间的用户,我非常喜欢这个平台提供的聊......
  • 2023-04-19:给定一个非负数组arr 任何两个数差值的绝对值,如果arr中没有,都要加入到arr里
    2023-04-19:给定一个非负数组arr任何两个数差值的绝对值,如果arr中没有,都要加入到arr里然后新的arr继续,任何两个数差值的绝对值,如果arr中没有,都要加入到arr里一直到arr大小固定。请问最终arr长度是多少。1<=arr的长度<=10^50<=arr的数值<=10^5来自国外题目论坛。答......
  • Bootstrap模板-使用现成的免费完善模板制作网页
    Bootstrap有一系列现成的免费而优秀的模板,我们可以用于制作前端页面稍加改进就是一个美观的页面 模板代码(源自purpleTemplate):<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=devi......
  • 关于shell变量值的截取-通过分隔符-去除前后匹配到的内容
    最近在工作中需要取一个变量的一部分值,举例说明,先看一个变量及值的格式,如Server="1.1.1.1-server01"我们可以通过各种支持切片的命令得到server01这一段,如cut,sed,awk等等命令其实当熟悉shell编程的可以知道,shell内部的变量处理方式也是可以得到的,可以通过echo${Server#*-}的......
  • 4-19
    今天是励志学javaweb的第二天 附图如下目前才学到基础的jsp今天的疑问是关于jsp与html后缀代码的区别 是不同的运行方式吗?......
  • CF 1820A-Yura's New Name, 800 / 思维 / ^-^ 或 ^^ 才合法
    CF1820A-Yura'sNewName处理方式:特殊情况提前判断+一般情况从首推到尾#include<iostream>#include<cstring>usingnamespacestd;constintN=1e2+10;typedeflonglongLL;intT;strings;intmain(){cin>>T;while(T--){......
  • el-table拖动排序
    html<el-tableref="multipleTable":data="tableData"align="left"borderclass="mytable"row-key="id"><el-table-column:index="indexMethod"align="center"type=&q......
  • python-悲观锁和乐观锁
    乐观锁和悲观锁它们都是一种思想,都是人们定义出来的概念,和语言无关并发控制:当程序出现并发的问题时,我们需要保证在并发情况下数据的准确性,以保证当前用户在和其他用户一起操作时,得到的结果和他单独操作时得到的结果是一样的,没有做好并发控制,就可能导致脏读、幻读、不可重复读等问......
  • 力扣---1071. 字符串的最大公因子
    对于字符串s和t,只有在s=t+...+t(t自身连接1次或多次)时,我们才认定“t能除尽s”。给定两个字符串str1和str2。返回最长字符串x,要求满足x能除尽str1且X能除尽str2。示例1:输入:str1="ABCABC",str2="ABC"输出:"ABC"示例2:输入:str1="ABABAB",str2=......