Find maximum sum taking every Kth element in the array
Last Updated :
16 Nov, 2022
Given an array arr[] of integers and an integer K, the task is to find the maximum sum taking every Kth element i.e. sum = arr[i] + arr[i + k] + arr[i + 2 * k] + arr[i + 3 * k] + ……. arr[i + q * k] starting with any i.
Examples:
Input: arr[] = {3, -5, 6, 3, 10}, K = 3
Output: 10
All possible sequence are:
3 + 3 = 6
-5 + 10 = 5
6 = 6
3 = 3
10 = 10
Input: arr[] = {3, 6, 4, 7, 2}, K = 2
Output: 13
Naive Approach: The idea to solve this by using two nested loops and find the sum of every sequence starting from index i and sum every Kth element up to n, and find the maximum from all of these. The time complexity of this method will be O(N2)
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int maxSum( int arr[], int n, int K)
{
int maximum = INT_MIN;
for ( int i = 0; i < n; i++) {
int sumk = 0;
for ( int j = i; j < n; j += K)
sumk = sumk + arr[j];
maximum = max(maximum, sumk);
}
return maximum;
}
int main()
{
int arr[] = { 3, 6, 4, 7, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
int K = 2;
cout << maxSum(arr, n, K);
return (0);
}
|
Java
class GFG
{
static int maxSum( int arr[], int n, int K)
{
int maximum = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
{
int sumk = 0 ;
for ( int j = i; j < n; j += K)
sumk = sumk + arr[j];
maximum = Math.max(maximum, sumk);
}
return maximum;
}
public static void main(String[] args)
{
int arr[] = { 3 , 6 , 4 , 7 , 2 };
int n = arr.length;
int K = 2 ;
System.out.println(maxSum(arr, n, K));
}
}
|
Python3
import sys
def maxSum(arr, n, K):
maximum = - sys.maxsize - 1
for i in range (n):
sumk = 0
for j in range (i, n, K):
sumk = sumk + arr[j]
maximum = max (maximum, sumk)
return maximum
if __name__ = = '__main__' :
arr = [ 3 , 6 , 4 , 7 , 2 ]
n = len (arr)
K = 2
print (maxSum(arr, n, K))
|
C#
using System;
class GFG
{
static int maxSum( int []arr, int n, int K)
{
int maximum = int .MinValue;
for ( int i = 0; i < n; i++)
{
int sumk = 0;
for ( int j = i; j < n; j += K)
sumk = sumk + arr[j];
maximum = Math.Max(maximum, sumk);
}
return maximum;
}
public static void Main()
{
int []arr = { 3, 6, 4, 7, 2 };
int n = arr.Length;
int K = 2;
Console.WriteLine(maxSum(arr, n, K));
}
}
|
PHP
<?php
function maxSum( $arr , $n , $K )
{
$maximum = PHP_INT_MIN;
for ( $i = 0; $i < $n ; $i ++)
{
$sumk = 0;
for ( $j = $i ; $j < $n ; $j += $K )
$sumk = $sumk + $arr [ $j ];
$maximum = max( $maximum , $sumk );
}
return $maximum ;
}
$arr = array (3, 6, 4, 7, 2);
$n = sizeof( $arr );
$K = 2;
echo maxSum( $arr , $n , $K );
?>
|
Javascript
<script>
function maxSum(arr, n, K)
{
var maximum = -1000000000;
for ( var i = 0; i < n; i++) {
var sumk = 0;
for ( var j = i; j < n; j += K)
sumk = sumk + arr[j];
maximum = Math.max(maximum, sumk);
}
return maximum;
}
var arr = [3, 6, 4, 7, 2];
var n = arr.length;
var K = 2;
document.write( maxSum(arr, n, K));
</script>
|
Time Complexity: O(N2) where N is the number of elements in array.
Auxiliary Space: O(1), no extra space required, so it is a constant.
Efficient Approach: This problem can be solved by using the concept of Suffix Arrays, we iterate the array from right side and store the suffix sum for each (i+k)’th element (ie., i+k < n) , and find the maximum sum. The time complexity of this method will be O(N).
Below is the implementation of the above approach.
C++
#include <bits/stdc++.h>
using namespace std;
int maxSum( int arr[], int n, int K)
{
int maximum = INT_MIN;
int sum[n] = { 0 };
for ( int i = n - 1; i >= 0; i--) {
if (i + K < n)
sum[i] = sum[i + K] + arr[i];
else
sum[i] = arr[i];
maximum = max(maximum, sum[i]);
}
return maximum;
}
int main()
{
int arr[] = { 3, 6, 4, 7, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
int K = 2;
cout << maxSum(arr, n, K);
return (0);
}
|
Java
class GFG {
static int maxSum( int arr[], int n, int K)
{
int maximum = Integer.MIN_VALUE;
int [] sum = new int [n];
for ( int i = n - 1 ; i >= 0 ; i--) {
if (i + K < n)
sum[i] = sum[i + K] + arr[i];
else
sum[i] = arr[i];
maximum = Math.max(maximum, sum[i]);
}
return maximum;
}
public static void main(String[] args)
{
int arr[] = { 3 , 6 , 4 , 7 , 2 };
int n = arr.length;
int K = 2 ;
System.out.print(maxSum(arr, n, K));
}
}
|
Python
def maxSum(arr, n, K):
maximum = - 2 * * 32 ;
sum = [ 0 ] * n
for i in range (n - 1 , - 1 , - 1 ):
if ( i + K < n ):
sum [i] = sum [i + K] + arr[i]
else :
sum [i] = arr[i];
maximum = max ( maximum, sum [i] )
return maximum;
arr = [ 3 , 6 , 4 , 7 , 2 ]
n = len (arr);
K = 2
print (maxSum(arr, n, K))
|
C#
using System;
class GFG {
static int maxSum( int [] arr, int n, int K)
{
int maximum = int .MinValue;
int [] sum = new int [n];
for ( int i = n - 1; i >= 0; i--) {
if (i + K < n)
sum[i] = sum[i + K] + arr[i];
else
sum[i] = arr[i];
maximum = Math.Max(maximum, sum[i]);
}
return maximum;
}
public static void Main()
{
int [] arr = { 3, 6, 4, 7, 2 };
int n = arr.Length;
int K = 2;
Console.Write(maxSum(arr, n, K));
}
}
|
PHP
<?php
function maxSum( $arr , $n , $K )
{
$maximum = PHP_INT_MIN;
$sum = array ( $n );
for ( $i = $n - 1; $i >= 0; $i --)
{
if ( $i + $K < $n )
$sum [ $i ] = $sum [ $i + $K ] + $arr [ $i ];
else
$sum [ $i ] = $arr [ $i ];
$maximum = max( $maximum , $sum [ $i ]);
}
return $maximum ;
}
{
$arr = array (3, 6, 4, 7, 2 );
$n = sizeof( $arr );
$K = 2;
echo (maxSum( $arr , $n , $K ));
}
|
Javascript
<script>
function maxSum(arr, n, K)
{
var maximum = -1000000000;
var sum = Array(n).fill(0);
for ( var i = n - 1; i >= 0; i--) {
if (i + K < n)
sum[i] = sum[i + K] + arr[i];
else
sum[i] = arr[i];
maximum = Math.max(maximum, sum[i]);
}
return maximum;
}
var arr = [3, 6, 4, 7, 2 ];
var n = arr.length;
var K = 2;
document.write( maxSum(arr, n, K));
</script>
|
Time Complexity: O(N) where N is the number of elements in array.
Auxiliary Space: O(N), where N is the number of elements in array.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...