zoukankan      html  css  js  c++  java
  • LeetCode 1043. Partition Array for Maximum Sum

    原题链接在这里:https://leetcode.com/problems/partition-array-for-maximum-sum/

    题目:

    Given an integer array A, you partition the array into (contiguous) subarrays of length at most K.  After partitioning, each subarray has their values changed to become the maximum value of that subarray.

    Return the largest sum of the given array after partitioning.

    Example 1:

    Input: A = [1,15,7,9,2,5,10], K = 3
    Output: 84
    Explanation: A becomes [15,15,15,9,10,10,10]

    Note:

    1. 1 <= K <= A.length <= 500
    2. 0 <= A[i] <= 10^6

    题解:

    When encounter such kind of problem.

    Could think from a simpler example. Say only one element, then 2 elements and more. Virtualize them, find routines.

    Use array dp to memorize maxmimum sum up to i.

    If, A = [1], then A becomes A[1]. dp = [1].

    A = [1, 15], then A becomes A[15, 15]. dp = [1, 30].

    A = [1, 15, 7], then A becomes A[15, 15, 15]. dp = [1, 30, 45].

    A = [1, 15, 7, 9], then A becomes A[15, 15, 15, 9]. dp = [1, 30, 45, 54].

    ...

    The routine is like from i back k(<= K) steps, find the maxmimum element, curMax * k + dp[i-k](if available).

    Finally return dp[A.length-1].

    Time Complexity: O(n*K). n = A.length.

    Space: O(n).

    AC Java:

     1 class Solution {
     2     public int maxSumAfterPartitioning(int[] A, int K) {
     3         int len = A.length;
     4         int [] dp = new int[len];
     5         for(int i = 0; i<len; i++){
     6             dp[i] = Integer.MIN_VALUE;
     7             int curMax = A[i];
     8             
     9             for(int k = 1; k<=K & i-k+1>=0; k++){
    10                 curMax = Math.max(curMax, A[i-k+1]);
    11                 dp[i] = Math.max(dp[i], (i-k<0 ? 0 : dp[i-k]) + curMax*k);
    12             }
    13         }
    14         
    15         return dp[len-1];
    16     }
    17 }
  • 相关阅读:
    Angularjs 搜索关键字高亮显示
    JavaScript函数的概念
    使用github之前的技能准备
    github的使用(概要版)
    浏览器与浏览器内核
    计算机数据存储
    Git版本控制常用命令整理
    整理几篇比较好的AndroidUI动画开发文章
    AngularJS指令
    图片的像素和Android的dp值之间的关系。
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11300836.html
Copyright © 2011-2022 走看看