Given integers N and K. The task is to construct an array of size N such that sum of all elements is divisible by K and the maximum element is as minimum as possible.
Note: There can be many possible arrays. Printing any one of them is acceptable
Examples:
Input: N = 1, K = 5
Output: 5
Explanation: Sum of all elements = 5 and 5 is divisible by 5.
Input: N = 4, K = 3
Output: 2 1 1 2
Explanation: Sum of all elements = 6 and 6 is divisible by 3.
Input: N = 7, K = 6
Output: 2 2 2 2 1 1 2
Approach: The solution is based on the idea that the smaller the sum of the array the smaller the maximum element. Follow the steps:
- Calculate the required sum of resultant array by using sum equals factor times K.
- The factor equals floor division of (N/K).
- Finally, calculate the maximum element of the array which is ceil division of (sum/N).
Below is the implementation of the above approach.
C++
#include <bits/stdc++.h>
using namespace std;
void buildArray( int N, int K)
{
vector< int > arr;
int cf = (N + K - 1) / K;
int sum = cf * K;
int maxi = (sum + N - 1) / N;
int c = N;
while (c * maxi >= sum) {
c--;
}
c--;
for ( int i = 0; i < c; i++) {
arr.push_back(maxi);
}
int rem_pos = N - c;
int rem_sum = sum - (c * maxi);
int last = (rem_sum / rem_pos);
for ( int i = 0; i < rem_pos - 1;
i++) {
arr.push_back(last);
}
if (last * (rem_pos) == rem_sum) {
arr.push_back(last);
}
else {
arr.push_back(rem_sum
- (last * (rem_pos - 1)));
}
for ( auto it : arr) {
cout << it << ' ' ;
}
}
int main()
{
int N = 4, K = 3;
buildArray(N, K);
return 0;
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
static void buildArray( int N, int K)
{
ArrayList<Integer> arr = new ArrayList<>();
int cf = (N + K - 1 ) / K;
int sum = cf * K;
int maxi = (sum + N - 1 ) / N;
int c = N;
while (c * maxi >= sum) {
c--;
}
c--;
for ( int i = 0 ; i < c; i++) {
arr.add(maxi);
}
int rem_pos = N - c;
int rem_sum = sum - (c * maxi);
int last = (rem_sum / rem_pos);
for ( int i = 0 ; i < rem_pos - 1 ; i++) {
arr.add(last);
}
if (last * (rem_pos) == rem_sum) {
arr.add(last);
}
else {
arr.add(rem_sum - (last * (rem_pos - 1 )));
}
for ( int i = 0 ; i < arr.size(); i++){
System.out.print(arr.get(i) + " " );
}
}
public static void main (String[] args) {
int N = 4 , K = 3 ;
buildArray(N, K);
}
}
|
Python3
def buildArray (N, K):
arr = [];
cf = (N + K - 1 ) / / K;
sum = cf * K;
maxi = ( sum + N - 1 ) / / N;
c = N;
while (c * maxi > = sum ):
c - = 1
c - = 1
for i in range (c):
arr.append(maxi);
rem_pos = N - c;
rem_sum = sum - (c * maxi);
last = (rem_sum / / rem_pos);
for i in range (rem_pos - 1 ):
arr.append(last);
if (last * (rem_pos) = = rem_sum):
arr.append(last);
else :
arr.append(rem_sum - (last * (rem_pos - 1 )));
for it in arr:
print (it, end = " " );
N = 4
K = 3 ;
buildArray(N, K);
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static void buildArray( int N, int K)
{
List< int > arr = new List< int >();
int cf = (N + K - 1) / K;
int sum = cf * K;
int maxi = (sum + N - 1) / N;
int c = N;
while (c * maxi >= sum)
{
c--;
}
c--;
for ( int i = 0; i < c; i++)
{
arr.Add(maxi);
}
int rem_pos = N - c;
int rem_sum = sum - (c * maxi);
int last = (rem_sum / rem_pos);
for ( int i = 0; i < rem_pos - 1; i++)
{
arr.Add(last);
}
if (last * (rem_pos) == rem_sum)
{
arr.Add(last);
}
else
{
arr.Add(rem_sum - (last * (rem_pos - 1)));
}
for ( int i = 0; i < arr.Count; i++)
{
Console.Write(arr[i] + " " );
}
}
public static void Main()
{
int N = 4, K = 3;
buildArray(N, K);
}
}
|
Javascript
<script>
const buildArray = (N, K) => {
arr = [];
let cf = parseInt((N + K - 1) / K);
let sum = cf * K;
let maxi = parseInt((sum + N - 1) / N);
let c = N;
while (c * maxi >= sum) {
c--;
}
c--;
for (let i = 0; i < c; i++) {
arr.push(maxi);
}
let rem_pos = N - c;
let rem_sum = sum - (c * maxi);
let last = parseInt((rem_sum / rem_pos));
for (let i = 0; i < rem_pos - 1;
i++) {
arr.push(last);
}
if (last * (rem_pos) == rem_sum) {
arr.push(last);
}
else {
arr.push(rem_sum
- (last * (rem_pos - 1)));
}
for (let it in arr) {
document.write(`${arr[it]} `);
}
}
let N = 4, K = 3;
buildArray(N, K);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)