สมมติว่าเรามีอาร์เรย์ที่เรียงลำดับไว้แล้วชื่อ nums ขนาด n และมีค่า m เราต้องการดำเนินการคิวรี n ครั้ง ดังนี้:
- ค้นหาค่า
kที่ไม่เป็นลบและน้อยกว่า2^mทำให้ค่า XOR ของทุกองค์ประกอบในnumsและkมีค่าสูงสุด ค่าkนี้คือคำตอบของคิวรีที่i - นำองค์ประกอบตัวสุดท้ายออกจากอาร์เรย์
numsปัจจุบัน - เราต้องหาอาร์เรย์
answerโดยที่answer[i]คือคำตอบของคิวรีที่i
ตัวอย่างเช่น หากอินพุตคือ nums = [0,1,1,3], m = 2 ผลลัพธ์จะเป็น [0,3,2,3] เนื่องจาก:
nums = [0,1,1,3],k = 0เพราะ0 XOR 1 XOR 1 XOR 3 XOR 0 = 3nums = [0,1,1],k = 3เพราะ0 XOR 1 XOR 1 XOR 3 = 3nums = [0,1],k = 2เพราะ0 XOR 1 XOR 2 = 3nums = [0],k = 3เพราะ0 XOR 3 = 3
วิธีแก้ปัญหา
x := 2^m - 1- สำหรับ
iในช่วง0ถึง ขนาดของnums- 1:nums[i] := nums[i] XOR xx := nums[i]
- คืนค่า
numsหลังจากกลับลำดับ
ตัวอย่างโค้ด
def solve(nums, m):
x = 2**m - 1
for i in range(len(nums)):
nums[i] ^= x
x = nums[i]
return nums[::-1]
nums = [0,1,1,3]
m = 2
print(solve(nums, m))
อินพุต
[0,1,1,3], 2
เอาต์พุต
[0, 3, 2, 3]