Given an array arr[] of integers, find the sum of values of even and odd positions where a position is index + 1.
Examples:
Input: arr[] = [1, 2, 3, 4, 5]
Output: [6, 9]
Explanation: Sum of elements at even places i.e. at 2nd and 4th places is (2 + 4 = 6). Sum of elements at odd places i.e at 1st,3rd and 5th places is (1 + 3 + 5 = 9).
Input: arr[] = [1, 1, 1, 1, 1]
Output: [2, 3]
Explanation: Sum of elements at even places is (1+1=2). Sum of elements at odd places is (1+1+1=3).
Table of Content
Check Position Type for Every Element - O(n) Time and O(1) Space
The idea is to find the sum of elements at odd positions and even positions separately. First, traverse the array and add all elements at odd positions to
oddSum. Then, traverse the array again and add all elements at even positions toevenSum.
#include <iostream>
#include <vector>
using namespace std;
vector<int> evenOddSum(vector<int> &arr)
{
int evenSum = 0, oddSum = 0;
// Find sum of elements at odd positions
for (int i = 0; i < arr.size(); i++)
{
if ((i + 1) % 2 != 0)
oddSum += arr[i];
}
// Find sum of elements at even positions
for (int i = 0; i < arr.size(); i++)
{
if ((i + 1) % 2 == 0)
evenSum += arr[i];
}
return {evenSum, oddSum};
}
// Driver code
int main()
{
vector<int> arr = {1, 1, 1, 1, 1};
vector<int> ans = evenOddSum(arr);
cout << "[" << ans[0] << ", " << ans[1] << "]";
return 0;
}
import java.util.*;
public class GFG {
public static int[] evenOddSum(int[] arr)
{
int evenSum = 0, oddSum = 0;
// Find sum of elements at odd positions
for (int i = 0; i < arr.length; i++) {
if ((i + 1) % 2 != 0)
oddSum += arr[i];
}
// Find sum of elements at even positions
for (int i = 0; i < arr.length; i++) {
if ((i + 1) % 2 == 0)
evenSum += arr[i];
}
return new int[] { evenSum, oddSum };
}
public static void main(String[] args)
{
int[] arr = { 1, 1, 1, 1, 1 };
int[] ans = evenOddSum(arr);
System.out.println("[" + ans[0] + ", " + ans[1]
+ "]");
}
}
def evenOddSum(arr):
evenSum = 0
oddSum = 0
# Find sum of elements at odd positions
for i in range(len(arr)):
if (i + 1) % 2 != 0:
oddSum += arr[i]
# Find sum of elements at even positions
for i in range(len(arr)):
if (i + 1) % 2 == 0:
evenSum += arr[i]
return [evenSum, oddSum]
# Driver code
if __name__ == "__main__":
arr = [1, 1, 1, 1, 1]
ans = evenOddSum(arr)
print("[{}, {}]".format(ans[0], ans[1]))
using System;
using System.Collections.Generic;
class GFG {
public List<int> evenOddSum(List<int> arr)
{
int evenSum = 0, oddSum = 0;
// Find sum of elements at odd positions
for (int i = 0; i < arr.Count; i++) {
if ((i + 1) % 2 != 0)
oddSum += arr[i];
}
// Find sum of elements at even positions
for (int i = 0; i < arr.Count; i++) {
if ((i + 1) % 2 == 0)
evenSum += arr[i];
}
return new List<int>{ evenSum, oddSum };
}
static void Main()
{
List<int> arr = new List<int>{ 1, 1, 1, 1, 1 };
GFG obj = new GFG();
List<int> ans = obj.evenOddSum(arr);
Console.WriteLine("[" + ans[0] + ", " + ans[1]
+ "]");
}
}
function evenOddSum(arr) {
let evenSum = 0, oddSum = 0;
// Find sum of elements at odd positions
for (let i = 0; i < arr.length; i++) {
if ((i + 1) % 2!= 0)
oddSum += arr[i];
}
// Find sum of elements at even positions
for (let i = 0; i < arr.length; i++) {
if ((i + 1) % 2 == 0)
evenSum += arr[i];
}
return [evenSum, oddSum];
}
// Driver code
let arr = [1, 1, 1, 1, 1];
let ans = evenOddSum(arr);
console.log(`[${ans[0]}, ${ans[1]}]`);
Output
[2, 3]
Single Traversal Using Index Parity - O(n) Time and O(1) Space
The idea is to traverse the array only once. For every element, check whether its position
(index + 1)is even or odd and add it to the corresponding sum. This avoids traversing the array multiple times.
#include <iostream>
#include <vector>
using namespace std;
vector<int> evenOddSum(vector<int> &arr)
{
int evenSum = 0, oddSum = 0;
// Traverse the array once
for (int i = 0; i < arr.size(); i++)
{
// Check position parity
if ((i + 1) % 2 == 0)
evenSum += arr[i];
else
oddSum += arr[i];
}
return {evenSum, oddSum};
}
// Driver code
int main()
{
vector<int> arr = {1, 1, 1, 1, 1};
vector<int> ans = evenOddSum(arr);
cout << "[" << ans[0] << ", " << ans[1] << "]";
return 0;
}
import java.util.Arrays;
public class GFG {
public static int[] evenOddSum(int[] arr)
{
int evenSum = 0, oddSum = 0;
// Traverse the array once
for (int i = 0; i < arr.length; i++) {
// Check position parity
if ((i + 1) % 2 == 0)
evenSum += arr[i];
else
oddSum += arr[i];
}
return new int[] { evenSum, oddSum };
}
// Driver code
public static void main(String[] args)
{
int[] arr = { 1, 1, 1, 1, 1 };
int[] ans = evenOddSum(arr);
System.out.println(Arrays.toString(ans));
}
}
def evenOddSum(arr):
evenSum = 0
oddSum = 0
# Traverse the array once
for i in range(len(arr)):
# Check position parity
if (i + 1) % 2 == 0:
evenSum += arr[i]
else:
oddSum += arr[i]
return [evenSum, oddSum]
# Driver code
if __name__ == "__main__":
arr = [1, 1, 1, 1, 1]
ans = evenOddSum(arr)
print("[{}, {}]".format(ans[0], ans[1]))
using System;
using System.Collections.Generic;
class GFG {
public List<int> evenOddSum(List<int> arr)
{
int evenSum = 0, oddSum = 0;
for (int i = 0; i < arr.Count; i++) {
// position = i + 1
if ((i + 1) % 2 == 0)
evenSum += arr[i];
else
oddSum += arr[i];
}
return new List<int>{ evenSum, oddSum };
}
static void Main()
{
List<int> arr = new List<int>{ 1, 1, 1, 1, 1 };
GFG obj = new GFG();
List<int> ans = obj.evenOddSum(arr);
Console.WriteLine("[" + ans[0] + ", " + ans[1]
+ "]");
}
}
function evenOddSum(arr) {
let evenSum = 0, oddSum = 0;
// Traverse the array once
for (let i = 0; i < arr.length; i++) {
// Check position parity
if ((i + 1) % 2 === 0)
evenSum += arr[i];
else
oddSum += arr[i];
}
return [evenSum, oddSum];
}
// Driver code
let arr = [1, 1, 1, 1, 1];
let ans = evenOddSum(arr);
console.log('[' + ans[0] + ','+ ans[1] + ']');
Output
[2, 3]