Related Articles

# Sum of distinct elements when elements are in range 1 to n

• Difficulty Level : Medium
• Last Updated : 26 Apr, 2021

Given an array of n elements such that every element of the array is an integer in the range 1 to n, find the sum of all the distinct elements of the array.

Examples:

```Input: arr[] = {5, 1, 2, 4, 6, 7, 3, 6, 7}
Output: 28
The distinct elements in the array are 1, 2,
3, 4, 5, 6, 7

Input: arr[] = {1, 1, 1}
Output: 1```

The problem has appeared here as a general problem and the solution will work for the above case also. But a better approach is explained below.
The approach is to mark the occurrences of the array elements by making the elements at those indices negative. Example, a = 1, a = 1, a = 1.
We check if a[abs(a[i])-1] is >=0, if yes, mark a[abs(a[i])-1] as negative. i.e. a = 1 >=0, we mark a[1-1] as a = -1. Next, a, check if (abs(a-1) is +ve or not. If -ve, it means a has already occurred before, else it is the first occurrence of this element. Refer the below code.

## C++

 `// C++ program to find sum of distinct elements``#include ``using` `namespace` `std;` `// Returns sum of distinct elements in arr[] assuming``// that elements in a[] are in range from 1 to n.``int` `sumOfDistinct(``int` `a[], ``int` `n)``{``    ``int` `sum = 0;``    ``for` `(``int` `i = 0; i < n; i++) {``    ` `        ``// If element appears first time``        ``if` `(a[``abs``(a[i]) - 1] >= 0) {``            ``sum += ``abs``(a[i]);``            ``a[``abs``(a[i]) - 1] *= -1;``        ``}``    ``}``   ` `    ``return` `sum;``}` `// Driver code``int` `main()``{``    ``int` `a[] = { 5, 1, 2, 4, 6, 7, 3, 6, 7 };``    ``int` `n = ``sizeof``(a)/``sizeof``(a);``    ``cout << sumOfDistinct(a, n) << endl;``    ``return` `0;``}`

## Java

 `// JAVA program to find sum of distinct``// elements in sorted order``import` `java.io.*;``import` `java.util.*;``import` `java.math.*;` `class` `GFG{``    ` `    ``// Returns sum of distinct elements in arr[]``    ``// assuming that elements in a[] are in``    ``// range from 1 to n.``    ``static` `int` `sumOfDistinct(``int` `a[], ``int` `n)``    ``{``        ``int` `sum = ``0``;``        ``for` `(``int` `i = ``0``; i < n; i++) {``    ` `            ``// If element appears first time``            ``if` `(a[Math.abs(a[i]) - ``1``] >= ``0``) {``                ``sum += Math.abs(a[i]);``                ``a[Math.abs(a[i]) - ``1``] *= -``1``;``            ``}``        ``}``    ` `        ``return` `sum;``    ``}`  `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `a[] = { ``5``, ``1``, ``2``, ``4``, ``6``, ``7``, ``3``, ``6``, ``7` `};``        ``int` `n = a.length;``        ``System.out.println(sumOfDistinct(a, n) );``    ``}``}` `// This code is contributed by Nikita Tiwari.`

## Python

 `# Python program to find sum of distinct elements``# in sorted order``import` `math` `# Returns sum of distinct elements in arr[]``# assuming that elements in a[] are in``# range from 1 to n.``def` `sumOfDistinct(a , n) :``    ``sum` `=` `0``    ``i ``=` `0``    ``while` `i < n:` `        ``# If element appears first time``        ``if` `(a[``abs``(a[i]) ``-` `1``] >``=` `0``) :``            ``sum` `=` `sum` `+` `abs``(a[i])``            ``a[``abs``(a[i]) ``-` `1``] ``=` `a[``abs``(a[i]) ``-` `1``] ``*` `(``-``1``)``        ``i ``=` `i ``+` `1``    ` `    ``return` `sum``;``    ` `    ` `# Driver code``a ``=` `[ ``5``, ``1``, ``2``, ``4``, ``6``, ``7``, ``3``, ``6``, ``7` `]``n ``=` `len``(a)``print` `sumOfDistinct(a, n)``    ` `# This code is contributed by Nikita Tiwari.`

## C#

 `// C# program to find sum of distinct``// elements in sorted order``using` `System;` `class` `GFG{``    ` `    ``// Returns sum of distinct elements``    ``// in arr[] assuming that elements``    ``// in a[] are in range from 1 to n``    ``static` `int` `sumOfDistinct(``int` `[]a, ``int` `n)``    ``{``        ``int` `sum = 0;``        ``for` `(``int` `i = 0; i < n; i++) {``    ` `            ``// If element appears first time``            ``if` `(a[Math.Abs(a[i]) - 1] >= 0) {``                ``sum += Math.Abs(a[i]);``                ``a[Math.Abs(a[i]) - 1] *= - 1;``            ``}``        ``}``    ` `        ``return` `sum;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]a = {5, 1, 2, 4, 6, 7, 3, 6, 7};``        ``int` `n = a.Length;``        ``Console.Write(sumOfDistinct(a, n));``    ``}``}` `// This code is contributed by Nitin Mittal`

## PHP

 `= 0)``        ``{``            ``\$sum` `+= ``abs``(``\$a``[``\$i``]);``            ``\$a``[``abs``(``\$a``[``\$i``]) - 1] *= -1;``        ``}``    ``}``    ` `    ``return` `\$sum``;``}` `    ``// Driver code``    ``\$a` `= ``array``(5, 1, 2, 4, 6, 7, 3, 6, 7);``    ``\$n` `= sizeof(``\$a``);``    ``echo` `sumOfDistinct(``\$a``, ``\$n``) ;` `// This code is contributed by nitin mittal``?>`

## Javascript

 ``

Output:

`28`

Time complexity: O(n)
Auxiliary Space : O(1)
This article is contributed by Ekta Goel. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.