ในปัญหานี้ เราได้รับอาร์เรย์ arr ของค่าที่ไม่ซ้ำกันที่จัดเรียงไว้ งานของเราคือ ค้นหาว่าอาร์เรย์มีองค์ประกอบที่มีค่าเท่ากับครึ่งหนึ่งของผลรวมอาร์เรย์หรือไม่ .
คำอธิบายปัญหา: สำหรับอาร์เรย์ arr[] เราจำเป็นต้องค้นหาองค์ประกอบ x ในอาร์เรย์เพื่อให้ผลรวมขององค์ประกอบทั้งหมดของอาร์เรย์เท่ากับ 2*X
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: arr[] ={2, 4, 5, 6, 7}
ผลลัพธ์: ไม่
คำอธิบาย:
ผลรวม =2 + 4 + 5 + 6 + 7 =24
ไม่พบองค์ประกอบ
แนวทางแก้ไข:
ในการแก้ปัญหา เราเพียงแค่ต้องค้นหาองค์ประกอบที่เป็นครึ่งหนึ่งของผลรวมขององค์ประกอบทั้งหมดของอาร์เรย์
อัลกอริทึม:
ขั้นตอนที่ 1: หาผลรวมของอิลิเมนต์ทั้งหมดของอาร์เรย์
ขั้นตอนที่ 2: ถ้าผลรวมเป็นเลขคี่ ให้คืนค่า -1
ขั้นตอนที่ 3: ถ้าผลรวมมีค่าเท่ากัน ให้หาองค์ประกอบ x ที่ x*2 =ผลรวม
ขั้นตอนที่ 4: หากพบองค์ประกอบ ให้คืนค่า 1
ขั้นตอนที่ 5: หากไม่พบองค์ประกอบส่งคืน -1.
สำหรับการค้นหาองค์ประกอบ เราสามารถใช้ อัลกอริทึมการค้นหาแบบไบนารี ตามที่จัดเรียงไว้
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
int checkForElement(int array[], int n) {
int arrSum = 0;
for (int i = 0; i < n; i++)
arrSum += array[i];
if (arrSum % 2)
return -1;
int start = 0;
int end = n - 1;
while (start <= end)
{
int mid = start + (end - start) / 2;
if ( ( 2 * array[mid] ) == arrSum)
return array[mid];
else if (( 2 * array[mid] ) > arrSum)
end = mid - 1;
else
start = mid + 1;
}
return -1;
}
int main() {
int array[] = { 4, 5, 6, 7, 9 };
int n = sizeof(array) / sizeof(array[0]);
int x = checkForElement(array, n);
if(x != -1)
cout<<"Element found, value is "<<x;
else
cout<<"Element not found!";
return 0;
} ผลลัพธ์ -
Element not found!