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

ค้นหาหมายเลขที่ขาดหายไปในช่วงโดยใช้ C++


ในปัญหานี้ เราได้รับ arr[] ขนาด n งานของเราคือ ค้นหาหมายเลขที่ขาดหายไปในช่วง .

อาร์เรย์ประกอบด้วยค่าทั้งหมดตั้งแต่ค่าที่น้อยที่สุดถึง (น้อยที่สุด + n) องค์ประกอบของช่วงหายไปจากอาร์เรย์ และเราต้องหาค่าที่ขาดหายไปนี้

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล

arr[] = {4, 8, 5, 7}

ผลผลิต

6

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาง่ายๆ คือการค้นหาองค์ประกอบที่ขาดหายไปโดยจัดเรียงอาร์เรย์ จากนั้นค้นหาองค์ประกอบแรกของช่วงโดยเริ่มจากค่าต่ำสุดซึ่งไม่มีอยู่ในอาร์เรย์ แต่มีอยู่ในช่วง

วิธีนี้เป็นวิธีที่ไร้เดียงสาและจะแก้ปัญหาคือความซับซ้อนของเวลา O(n log n)

อีกแนวทางหนึ่งในการแก้ปัญหาในเวลาอันสั้นคือการใช้ XOR ของค่าของอาร์เรย์และช่วง เราจะค้นหา XOR ของค่าทั้งหมดในช่วงและค้นหา XOR ของค่าทั้งหมดในอาร์เรย์ด้วย XOR ของค่าทั้งสองนี้จะเป็นค่าที่หายไปของเรา

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <bits/stdc++.h>
using namespace std;
int findMissingNumArr(int arr[], int n){
   int arrMin = *min_element(arr, arr+n);
   int numXor = 0;
   int rangeXor = arrMin;
   for (int i = 0; i < n; i++) {
      numXor ^= arr[i];
      arrMin++;
      rangeXor ^= arrMin;
   }
   return numXor ^ rangeXor;
}
int main(){
   int arr[] = { 5, 7, 4, 8, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The missing value in the array is "<<findMissingNumArr(arr, n);
   return 0;
}

ผลลัพธ์

The missing value in the array is 6