Array Division

You are given an array containing n positive integers.

Your task is to divide the array into k subarrays so that the maximum sum in a subarray is as small as possible.

Example:

Input:  n = 5, k = 3, arr = {2, 4, 7, 3, 5}
Output: 8

Approach

Java

public class ArrayDivision {
    public static void main(String[] args) {

        long n = 5, k = 3;
        long[] arr = { 24735 };

        System.out.println(arrayDivision(n, k, arr));

    }

    static boolean check(long midlong nlong klong[] arr) {
        long cnt = 1, cur = 0;
        for (int i = 0; i < n; i++) {
            if (arr[i] > mid) {
                return false;
            } else if (cur + arr[i] > mid) {
                cur = arr[i];
                cnt++;
            } else {
                cur += arr[i];
            }
        }
        if (cnt <= k)
            return true;
        return false;
    }

    static long arrayDivision(long nlong klong[] arr) {

        long lo = 1, hi = (long1e18;
        while (lo + 1 < hi) {
            long mid = (lo + hi) / 2;
            if (check(mid, n, k, arr))
                hi = mid;
            else
                lo = mid;
        }
        return hi;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

bool check(long long midlong long n,
           long long kvector<long long&arr)
{
    long long cnt = 1cur = 0;
    for (long long i = 0i < ni++)
    {
        if (arr[i] > mid)
        {
            return false;
        }
        else if (cur + arr[i] > mid)
        {
            cur = arr[i];
            cnt++;
        }
        else
        {
            cur += arr[i];
        }
    }
    if (cnt <= k)
        return true;
    return false;
}

long long arrayDivision(long long nlong long k,
                        vector<long long&arr)
{

    long long lo = 1hi = 1e18;
    while (lo + 1 < hi)
    {
        long long mid = (lo + hi) / 2;
        if (check(midnkarr))
            hi = mid;
        else
            lo = mid;
    }
    return hi;
}

int main()
{
    long long n = 5k = 3;
    vector<long longarr = {24735};

    cout << arrayDivision(nkarr<< "\n";

    return 0;
}


No comments:

Post a Comment