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

Given an array of n elements such that every element of 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
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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 as negative. Example, a[0] = 1, a[1] = 1, a[2] = 1.
We check if a[abs(a[i])-1] is >=0, if yes, mark a[abs(a[i])-1] as negative. i.e. a[0] = 1 >=0, we mark a[1-1] as a[0] = -1. Next, a[1], check if (abs(a[1]-1) is +ve or not. If -ve, it means a[1] 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[0]); ` `    ``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 ` `?> `

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.

My Personal Notes arrow_drop_up

Improved By : nitin mittal

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.