Рубрики

Найти сумму неповторяющихся (различных) элементов в массиве

При наличии целочисленного массива с повторяющимися элементами задача состоит в том, чтобы найти сумму всех различных элементов в массиве.

Примеры:

Input  : arr[] = {12, 10, 9, 45, 2, 10, 10, 45,10};
Output : 78
Here we take 12, 10, 9, 45, 2 for sum
because it's distinct elements 

Input : arr[] = {1, 10, 9, 4, 2, 10, 10, 45 , 4};
Output : 71

Простое решение заключается в использовании двух вложенных циклов. Внешний цикл выбирает элемент один за другим, начиная с самого левого элемента. Внутренний цикл проверяет наличие элемента слева от него. Если присутствует, то игнорирует элемент.

Сложность времени: O (n 2 )
Вспомогательное пространство: O (1)

Лучшее решение этой проблемы состоит в том, что, используя технику сортировки, мы сначала сортируем все элементы массива в порядке возрастания и находим отдельные элементы в массиве.

C ++

// C ++ Находим сумму всех неповторенных
// элементы в массиве
#include<bits/stdc++.h>

using namespace std;

  
// Находим сумму всех неповторяющихся элементов
// в массиве

int findSum(int arr[], int n)

{

    // сортируем все элементы массива

    sort(arr, arr + n);

  

    int sum = 0;

    for (int i=0; i<n; i++)

    {

        if (arr[i] != arr[i+1])

            sum = sum + arr[i];

    }

  

    return sum;

}

  
// Код драйвера

int main()

{

    int arr[] = {1, 2, 3, 1, 1, 4, 5, 6};

    int n = sizeof(arr)/sizeof(int);

    cout << findSum(arr, n);

    return 0;

}

Джава

import java.util.Arrays;

  
// Java найти сумму всех неповторенных
// элементы в массиве

public class GFG {

  
// Находим сумму всех неповторяющихся элементов
// в массиве

    static int findSum(int arr[], int n) {

        // сортируем все элементы массива

  

        Arrays.sort(arr);

         

        int sum = arr[0];

        for (int i = 0; i < n-1; i++) {

            if (arr[i] != arr[i + 1]) {

                sum = sum + arr[i+1];

            }

        }

  

        return sum;

    }

  
// Код драйвера

    public static void main(String[] args) {

        int arr[] = {1, 2, 3, 1, 1, 4, 5, 6};

        int n = arr.length;

        System.out.println(findSum(arr, n));

  

    }

}

python3

      
# Python3 Найти сумму всех неповторенных
# элементов в массиве

  

   
# Найти сумму всех неповторяющихся элементов
# в массиве

def findSum(arr,  n):

    # сортировать все элементы массива

    arr.sort()

   

    sum = arr[0]

    for i in range(0,n-1):

        if (arr[i] != arr[i+1]):

            sum = sum + arr[i+1]

      

    return sum

   
# Код драйвера

def main():

    arr= [1, 2, 3, 1, 1, 4, 5, 6]

    n = len(arr)

    print(findSum(arr, n))

  

if __name__ == '__main__':

    main()

# Этот код предоставлен 29AjayKumar

C #

// C # Находим сумму всех неповторенных
// элементы в массиве

using System;

class GFG 

  

    // Находим сумму всех неповторяющихся элементов

    // в массиве

    static int findSum(int []arr, int n)

    

        // сортируем все элементы массива

        Array.Sort(arr); 

          

        int sum = arr[0]; 

        for (int i = 0; i < n - 1; i++) 

        

            if (arr[i] != arr[i + 1]) 

            

                sum = sum + arr[i + 1]; 

            

        

        return sum; 

    

  

    // Код драйвера

    public static void Main()

    

        int []arr = {1, 2, 3, 1, 1, 4, 5, 6}; 

        int n = arr.Length; 

        Console.WriteLine(findSum(arr, n)); 

    

  
// Этот код предоставлен 29AjayKumar

Выход:

21

Сложность времени: O (n log n)
Космическая сложность: O (1)

Эффективное решение этой проблемы состоит в том, что, используя unordered_set, мы запускаем цикл for, значение которого появляется в первый раз, когда его добавляем в переменную sum, и сохраняем в хеш-таблице, чтобы в следующий раз мы не использовали это значение.

C ++

// C ++ Находим сумму всех неповторенных
// элементы в массиве
#include<bits/stdc++.h>

using namespace std;

  
// Находим сумму всех неповторяющихся элементов
// в массиве

int findSum(int arr[],int n)

{

    int sum = 0;

  

    // Хеш для хранения всего элемента массива

    unordered_set< int > s;

    for (int i=0; i<n; i++)

    {

        if (s.find(arr[i]) == s.end())

        {

            sum += arr[i];

            s.insert(arr[i]);

        }

    }

  

    return sum;

}

  
// Код драйвера

int main()

{

    int arr[] = {1, 2, 3, 1, 1, 4, 5, 6};

    int n = sizeof(arr)/sizeof(int);

    cout << findSum(arr, n);

    return 0;

}

Джава

// Java Найти сумму всех неповторенных
// элементы в массиве

import java.util.*;

  

class GFG

{

      

    // Находим сумму всех неповторяющихся элементов

    // в массиве

    static int findSum(int arr[], int n)

    {

        int sum = 0;

  

        // Хеш для хранения всего элемента массива

        HashSet<Integer> s = new HashSet<Integer>();

        for (int i = 0; i < n; i++)

        {

            if (!s.contains(arr[i]))

            {

                sum += arr[i];

                s.add(arr[i]);

            }

        }

        return sum;

    }

  

    // Код драйвера

    public static void main(String[] args) 

    {

        int arr[] = {1, 2, 3, 1, 1, 4, 5, 6};

        int n = arr.length;

        System.out.println(findSum(arr, n));

    }

  
// Этот код предоставлен Rajput-Ji

python3

# Python3 Найти сумму всех
# неповторяющихся элементов в массиве

  
# Найти сумму всех неповторенных
# элементов в массиве

def findSum(arr, n):

    s = set()

    sum = 0

  

    # Хеш для хранения всего элемента

    № массива

    for i in range(n):

        if arr[i] not in s:

            s.add(arr[i])

    for i in s:

        sum = sum + i

  

    return sum

  
# Код драйвера

arr = [1, 2, 3, 1, 1, 4, 5, 6]

n = len(arr)

print(findSum(arr, n))

  
# Этот код предоставлен Shrikant13

C #

// C # Находим сумму всех неповторенных
// элементы в массиве

using System;

using System.Collections.Generic;

  

class GFG

{

      

    // Находим сумму всех неповторяющихся элементов

    // в массиве

    static int findSum(int []arr, int n)

    {

        int sum = 0;

  

        // Хеш для хранения всего элемента массива

        HashSet<int> s = new HashSet<int>();

        for (int i = 0; i < n; i++)

        {

            if (!s.Contains(arr[i]))

            {

                sum += arr[i];

                s.Add(arr[i]);

            }

        }

        return sum;

    }

  

    // Код драйвера

    public static void Main(String[] args) 

    {

        int []arr = {1, 2, 3, 1, 1, 4, 5, 6};

        int n = arr.Length;

        Console.WriteLine(findSum(arr, n));

    }

}

  
// Этот код предоставлен Rajput-Ji


Выход:

21

Сложность времени: O (n)
Вспомогательное пространство: O (n)

Эта статья предоставлена DANISH_RAZA . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Найти сумму неповторяющихся (различных) элементов в массиве

0.00 (0%) 0 votes