ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่จะค้นหาองค์ประกอบที่ k ที่หายไปในอาร์เรย์ที่ไม่เรียงลำดับที่กำหนด
ค้นหา k-th จำนวนที่ขาดหายไปจาก min ถึง max ในอาร์เรย์ที่ไม่ได้เรียงลำดับที่กำหนด มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นอาร์เรย์ที่ไม่ได้เรียงลำดับ
- แทรกองค์ประกอบทั้งหมดลงในชุด
- ค้นหาองค์ประกอบสูงสุดและต่ำสุดจากอาร์เรย์
- เขียนลูปที่วนซ้ำจาก min ถึง max และรักษาตัวแปรสำหรับการนับ
- หากมีองค์ประกอบปัจจุบันในชุด ให้เพิ่มการนับ
- ถ้าการนับเท่ากับ 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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น