พิจารณาว่ามีอาร์เรย์ 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