Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาลำดับย่อยที่ให้ Bitwise AND และ OR สูงสุดใน Python

สมมติว่าเรามีอาร์เรย์ n สมาชิก ต้องการหาผลรวมสูงสุดจากการเลือกสองลำดับย่อย (อาจเหมือนกันได้) โดยลำดับแรกคำนวณ Bitwise AND ทุกตัว ลำดับที่สองคำนวณ Bitwise OR ทุกตัว ผลรวมของทั้งสองต้องมากที่สุด

เช่น A = [4, 6, 7, 2] ผลลัพธ์คือ 14 (AND สูงสุด = 7 จาก [7], OR สูงสุด = 7 จาก [4,6,7,2])

ขั้นตอนการแก้ปัญหา

  1. AND สูงสุด = ค่าสูงสุดในอาร์เรย์ (เลือกเฉพาะตัวนั้น)
  2. OR สูงสุด = OR ของทุกตัวในอาร์เรย์
  3. ผลรวม = max_val + or_all

ตัวอย่างโค้ด Python

def get_max_sum(arr):
    and_max = max(arr)
    or_max = 0
    for x in arr:
        or_max |= x
    return and_max + or_max

a = [4, 6, 7, 2]
print(get_max_sum(a))

อินพุต

[4, 6, 7, 2]

เอาต์พุต

14