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

พิมพ์ค่าที่ไม่ซ้ำในอาร์เรย์จำนวนเต็มใน C++

ภาพรวมปัญหา

ได้รับอาร์เรย์จำนวนเต็ม ต้องพิมพ์ค่าที่ไม่ซ้ำกัน (distinct values) ทั้งหมด

ตัวอย่าง

Input: array = {1, 5, 7, 12, 1, 6, 10, 7, 5}
Output: 1 5 7 12 6 10

วิธีแก้ปัญหา 3 แบบ

1. Nested Loops (Simple, O(n²))

ลูปนอกเลือกค่า ลูปในเช็คค่าก่อนหน้า ถ้ายังไม่เคยเจอ → พิมพ์

2. Sorting (O(n log n))

เรียงอาร์เรย์ก่อน ค่าซ้ำจะติดกัน → พิมพ์เฉพาะค่าแรกของแต่ละกลุ่ม

3. Hash Set (O(n) Average)

ใช้ unordered_set ติดตามค่าที่เคยเจอ พิมพ์ตอนเจอครั้งแรก

ตัวอย่างโค้ด C++ (ทั้ง 3 วิธี)

// วิธี 1: Nested Loops
void printDistinctValues(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        int j;
        for (j = 0; j < i; j++)
            if (arr[i] == arr[j]) break;
        if (i == j) cout << arr[i] << "\t";
    }
}

// วิธี 2: Sorting
void printDistinctElements(int arr[], int n) {
    sort(arr, arr + n);
    for (int i = 0; i < n; i++) {
        while (i < n - 1 && arr[i] == arr[i + 1]) i++;
        cout << arr[i] << "\t";
    }
}

// วิธี 3: Hash Set (แนะนำ)
void printDistinctElements(int arr[], int n) {
    unordered_set<int> visited;
    for (int i = 0; i < n; i++) {
        if (visited.find(arr[i]) == visited.end()) {
            visited.insert(arr[i]);
            cout << arr[i] << "\t";
        }
    }
}

ผลลัพธ์ (Output)

Distinct elements of the array are:
1 5 6 7 10 12