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

หาค่าที่หายไปลำดับที่ k ในอาร์เรย์ไม่เรียงลำดับใน C++

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมเพื่อหาค่าที่หายไปลำดับที่ k ในอาร์เรย์ที่ไม่ได้เรียงลำดับ

หาตัวเลข k-th ที่หายไปจากค่าต่ำสุดถึงค่าสูงสุดในอาร์เรย์ที่ไม่ได้เรียงลำดับ มาดูขั้นตอนการแก้ปัญหา

  • กำหนดค่าเริ่มต้นของอาร์เรย์ที่ไม่ได้เรียงลำดับ
  • แทรกองค์ประกอบทั้งหมดเข้าไปในเซต
  • หาค่าสูงสุดและต่ำสุดจากอาร์เรย์
  • เขียนลูปที่วนจากค่าต่ำสุดถึงค่าสูงสุดและเก็บตัวแปรนับ
    • ถ้าองค์ประกอบปัจจุบันอยู่ในเซต ให้เพิ่มตัวนับ
    • ถ้าตัวนับเท่ากับ k ให้คืนค่า i

ตัวอย่างโค้ด

#include <bits/stdc++.h> 
using namespace std; 

int findMissingNumber(int arr[], int n, int k) { 
    unordered_set<int> numbers; 
    int count = 0; 
    for (int i = 0; i < n; i++) { 
        numbers.insert(arr[i]); 
    } 
    int max = *max_element(arr, arr + n); 
    int min = *min_element(arr, arr + n); 
    for (int i = min + 1; i < max; i++) { 
        if (numbers.find(i) == numbers.end()) { 
            count++; 
        } 
        if (count == k) { 
            return i; 
        } 
    } 
    return -1; 
} 

int main() { 
    int arr[] = { 1, 10, 3, 2, 5 }, n = 5; 
    int k = 3; 
    cout << findMissingNumber(arr, n, k) << endl; 
    return 0; 
}

ผลลัพธ์

หากรันโค้ดด้านบน จะได้ผลลัพธ์ดังนี้:

7

สรุป

หากมีข้อสงสัยเกี่ยวกับบทช่วยสอนนี้ สามารถถามได้ในส่วนความคิดเห็น