Hãy xem xét chúng ta có một mảng A với vài phần tử. Chúng ta phải tìm tổng của tất cả các phần tử khác nhau trong mảng. Vì vậy, nếu A =[5, 12, 63, 5, 33, 47, 12, 63], thì tổng các phần tử riêng biệt là 160. Các phần tử trùng lặp chỉ bị bỏ qua khi nó đã được xem xét.
Chúng ta có thể sử dụng tập hợp không có thứ tự để giải quyết vấn đề này một cách hiệu quả. Chúng tôi sẽ chạy một vòng lặp for duy nhất và giá trị nào đến lần đầu tiên, giá trị đó sẽ được cộng vào biến tổng và lưu trữ trong bảng băm mà cho lần sau, chúng tôi sẽ không sử dụng giá trị này.
Ví dụ
#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); }
Đầu ra
Sum is: 160