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

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


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

เราสามารถใช้ชุดที่ไม่เรียงลำดับเพื่อแก้ปัญหานี้ได้อย่างมีประสิทธิภาพ เราจะรันหนึ่ง single for loop และค่าใดเกิดขึ้นครั้งแรก เพิ่มในตัวแปร 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