zoukankan      html  css  js  c++  java
  • LeetCode 410. Split Array Largest Sum

    原题链接在这里:https://leetcode.com/problems/split-array-largest-sum/

    题目:

    Given an array which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays. Write an algorithm to minimize the largest sum among these m subarrays.

    Note:
    If n is the length of array, assume the following constraints are satisfied:

    • 1 ≤ n ≤ 1000
    • 1 ≤ m ≤ min(50, n)

    Examples:

    Input:
    nums = [7,2,5,10,8]
    m = 2
    
    Output:
    18
    
    Explanation:
    There are four ways to split nums into two subarrays.
    The best way is to split it into [7,2,5] and [10,8],
    where the largest sum among the two subarrays is only 18.

    题解:

    Let dp[i][j] denotes up to index j, with i cut, the minimum of largest sum of subarrays.

    Thus with i = 0, that means there is no cut. Initialize dp[0][j] as sum of nums[0] to nums[j].

    For dp[i][j], we could cut at (0, 1, .... j -1). And minimize Math.max(dp[i - 1][k], dp[0][j] - dp[0][k]).

    Note: update part, i starts from 1, becasue we need dp[i - 1][k].

    Time Complexity: O(m * n ^ 2). n = nums.length.

    Space: O(m * n).

    AC Java:

     1 class Solution {
     2     public int splitArray(int[] nums, int m) {
     3         if(nums == null || nums.length == 0){
     4             return 0;
     5         }
     6         
     7         int n = nums.length;
     8         int [][] dp = new int[m][n];
     9         dp[0][0] = nums[0];
    10         for(int j = 1; j < n; j++){
    11             dp[0][j] = dp[0][j - 1] + nums[j]; 
    12         }
    13         
    14         for(int i = 1; i < m; i++){
    15             for(int j = i; j < n; j++){
    16                 int min = Integer.MAX_VALUE;
    17                 for(int k = 0; k < j; k ++){
    18                     min = Math.min(min, Math.max(dp[i - 1][k], dp[0][j] - dp[0][k]));
    19                 }
    20                 
    21                 dp[i][j] = min;
    22             }
    23         }
    24         
    25         return dp[m - 1][n - 1];
    26     }
    27 }
  • 相关阅读:
    GET or POST?
    ASP.NET AJAX简述
    C# 后台调用存储过程
    S,C,SC,表
    js判定浏览器的种类
    sql 数据表添加或删除或修改字段 alter
    sql判定数据表是否存在,存在删除,再新建表或修改表名
    sql 所有的表建好后,为表添加外键约束
    打开office弹出steup error 的解决办法
    a标签的属性
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12200572.html
Copyright © 2011-2022 走看看