Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาผลรวมขององค์ประกอบที่ไม่ซ้ำ (Distinct) ในอาร์เรย์ใน C++

พิจารณาว่ามีอาร์เรย์ A ที่มีองค์ประกอบบ้าง เราต้องหาผลรวมขององค์ประกอบที่แตกต่างกันทั้งหมดในอาร์เรย์ ดังนั้นถ้า A = [5, 12, 63, 5, 33, 47, 12, 63] ผลรวมขององค์ประกอบที่แตกต่างกันคือ 160 องค์ประกอบซ้ำจะถูกละเว้นหลังจากพิจารณาครั้งแรกแล้ว

เราสามารถใช้ unordered set เพื่อแก้ปัญหานี้ได้อย่างมีประสิทธิภาพ เราจะรันลูป for เดียว และค่าที่มาครั้งแรก จะบวกเข้าไปในตัวแปร sum และเก็บในตารางแฮช เพื่อครั้งต่อไปจะไม่ใช้ค่านั้น

ตัวอย่าง

#include <iostream> 
#include <unordered_set> 
using namespace std; 

int getNonRepeatSum(int arr[], int n) {
    int sum = 0;
    unordered_set<int> u_set;
    for (int i = 0; i < n; i++) {
        if (u_set.find(arr[i]) == u_set.end()) {
            sum += arr[i];
            u_set.insert(arr[i]);
        }
    }
    return sum;
}

int main() {
    int arr[] = {5, 12, 63, 5, 33, 47, 12, 63};
    int n = sizeof(arr) / sizeof(int);
    cout << "Sum is: " << getNonRepeatSum(arr, n);
}

ผลลัพธ์

Sum is: 160