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

ค้นหาจำนวนที่ใกล้เคียงที่สุดในอาร์เรย์ใน C++


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n และมีการจัดเรียงองค์ประกอบ เราต้องหาค่าที่ใกล้เคียงที่สุดกับจำนวนเต็มที่กำหนด อาร์เรย์อาจประกอบด้วยค่าที่ซ้ำกันและตัวเลขติดลบ ดังนั้นหากอาร์เรย์เป็นแบบ [2, 5, 6, 7, 8, 8, 9] และหมายเลขเป้าหมายคือ 4 องค์ประกอบที่ใกล้เคียงที่สุดคือ 5

เราสามารถแก้ปัญหานี้ได้โดยการสำรวจผ่านอาร์เรย์ที่กำหนดและติดตามความแตกต่างที่แน่นอนขององค์ประกอบปัจจุบันกับทุกองค์ประกอบ สุดท้ายส่งคืนองค์ประกอบที่มีความแตกต่างสัมบูรณ์ขั้นต่ำ

ตัวอย่าง

#include<iostream>
#include<list>
using namespace std;
int getNearest(int x, int y, int target) {
   if (target - x >= y - target)
      return y;
   else
      return x;
}
int getNearestElement(int arr[], int n, int target) {
   if (target <= arr[0])
      return arr[0];
   if (target >= arr[n - 1])
      return arr[n - 1];
   int left = 0, right = n, mid = 0;
   while (left < right) {
      mid = (left + right) / 2;
      if (arr[mid] == target)
         return arr[mid];
      if (target < arr[mid]) {
         if (mid > 0 && target > arr[mid - 1])
            return getNearest(arr[mid - 1], arr[mid], target);
            right = mid;
      } else {
         if (mid < n - 1 && target < arr[mid + 1])
            return getNearest(arr[mid], arr[mid + 1], target);
         left = mid + 1;
      }
   }
   return arr[mid];
}
int main() {
   int arr[] = { 2, 5, 6, 7, 8, 8, 9 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int target = 4;
   cout << "Nearest element of " << target << " is: " << getNearestElement(arr, n, target);
}

ผลลัพธ์

Nearest element of 4 is: 5