สมมติว่าเรามีอาร์เรย์ A เราต้องหาตัวเลข X ที่ (A[0] XOR X) + (A[1] XOR X) + … + A[n – 1] XOR X มีค่าน้อยที่สุด
ดังนั้น หากอินพุตเป็นแบบ [3, 4, 5, 6, 7] ผลลัพธ์จะเป็น X =7 , Sum =10
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน search_res() นี่จะใช้เวลา arr, n
- องค์ประกอบ :=arr[0]
- สำหรับฉันในช่วง 0 ถึงขนาดของ arr ทำ
- ถ้า arr[i]> องค์ประกอบ แล้ว
- องค์ประกอบ :=arr[i]
- ถ้า arr[i]> องค์ประกอบ แล้ว
- p :=จำนวนเต็มของ (ล็อกขององค์ประกอบฐาน 2) + 1
- X :=0
- สำหรับ i ในช่วง 0 ถึง p ให้ทำ
- cnt :=0
- สำหรับ j ในช่วง 0 ถึง n ทำ
- ถ้า arr[j] AND (2^i) ไม่ใช่ศูนย์ ดังนั้น
- cnt :=cnt + 1
- ถ้า arr[j] AND (2^i) ไม่ใช่ศูนย์ ดังนั้น
- ถ้า cnt> ส่วนจำนวนเต็มของ (n / 2) ไม่ใช่ศูนย์ ดังนั้น
- X :=X + (2^i)
- ผลรวม :=0
- สำหรับ i ในช่วง 0 ถึง n ให้ทำ
- sum :=sum +(X XOR arr[i])
- คืนค่า X และผลรวม
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from math import log2 def search_res(arr, n): element = arr[0] for i in range(len(arr)): if(arr[i] > element): element = arr[i] p = int(log2(element)) + 1 X = 0 for i in range(p): cnt = 0 for j in range(n): if (arr[j] & (1 << i)): cnt += 1 if (cnt > int(n / 2)): X += 1 << i sum = 0 for i in range(n): sum += (X ^ arr[i]) print("X =", X, ", Sum =", sum) arr = [3, 4, 5, 6, 7] n = len(arr) search_res(arr, n)
อินพุต
[3, 4, 5, 6, 7]
ผลลัพธ์
X = 7 , Sum = 10