ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ขนาด n และจำนวนเต็ม k งานของเราคือค้นหาอาร์เรย์ย่อยภายในจากดัชนี i ถึง j และคำนวณระดับบิต AND ขององค์ประกอบทั้งหมด หลังจากนี้พิมพ์ค่าต่ำสุดของ abs(K- (ระดับบิต AND ของ subarray))
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − arr[] ={5, 1}, k =2
ผลผลิต −
ในการแก้ปัญหานั้น สามารถทำได้หลายวิธี
วิธีแก้ไขง่ายๆ วิธีหนึ่งคือใช้วิธีการโดยตรง โดยการค้นหาระดับบิต AND สำหรับอาร์เรย์ย่อยทั้งหมด จากนั้นจึงค้นหา |K-X|.
ขั้นตอนที่ 1 − ค้นหาระดับบิต AND สำหรับอาร์เรย์ย่อยทั้งหมด
ขั้นตอนที่ 2 − สำหรับแต่ละค่าที่พบในขั้นตอนที่ 1 ด้านบน (พูด X) จงหาค่าของ |k - X|.
ขั้นตอนที่ 3 − เก็บค่าต่ำสุดที่พบด้านบนไว้ในตัวแปร min
ขั้นตอนที่ 4 − ในตอนท้าย พิมพ์ min.
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
int minimum = 1000;
for (int i = 0; i < n; i++) {
int X = arr[i];
for (int j = i; j < n; j++) {
X &= arr[j];
minimum = min(minimum, abs(k - X));
}
}
return minimum;
}
int main() {
int arr[] = { 1, 6 , 4, 9, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 5;
cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
return 0;
} ผลลัพธ์
Minimum value difference between Bitwise AND of sub-array and K is 1
อีกวิธีหนึ่งคือใช้การสังเกตการดำเนินการ AND ในอาร์เรย์ย่อย ระดับบิต AND มีลักษณะที่จะไม่เพิ่มขึ้น ดังนั้นเราต้องคอยตรวจสอบส่วนต่างขั้นต่ำที่จะเพิ่มขึ้นเมื่อ X ≤ K
ตัวอย่าง
#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
int minimum = 1000000;
for (int i = 0; i < n; i++) {
int BitwiseAND = arr[i];
for (int j = i; j < n; j++) {
BitwiseAND &= arr[j];
minimum = min(minimum, abs(k - BitwiseAND));
if (BitwiseAND <= k)
break;
}
}
return minimum;
}
int main() {
int arr[] = {1, 6 , 4, 9, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 5;
cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
return 0;
} ผลลัพธ์
Minimum value difference between Bitwise AND of sub-array and K is 1