สมมติว่าเราได้รับคลาสที่เรียกว่า 'TestArray' ที่มีอาร์เรย์ส่วนตัวซึ่งสามารถมีค่าได้ 0 หรือ 1 เท่านั้น และสองฟังก์ชันของสมาชิกสาธารณะ length() และ query() ฟังก์ชัน length() จะคืนค่าความยาวของอาร์เรย์ และฟังก์ชัน query() จะคืนค่าที่ต่างกันสามค่าที่เปรียบเทียบค่าต่างๆ ในอาร์เรย์ ฟังก์ชันรับค่า p, q, r, s สี่ค่าเป็นอินพุตและทำงานในลักษณะนี้ -
-
หากค่าทั้งสี่ในดัชนีที่กำหนดของอาร์เรย์เป็น 0 หรือ 1 ค่านั้นจะส่งกลับ 4
-
มิฉะนั้น หากค่าสามค่าในดัชนีที่กำหนดของอาร์เรย์มีค่าเท่ากัน และค่าที่สี่ต่างกัน จะส่งกลับค่า 2
-
มิฉะนั้น หากอาร์เรย์มีค่า 0 สองค่า และค่า 2 ค่า 1 ในดัชนีที่กำหนดของอาร์เรย์ ก็จะส่งกลับค่า 0
เราต้องหาดัชนีขององค์ประกอบที่บ่อยที่สุดในอาร์เรย์โดยไม่ต้องเข้าถึงอาร์เรย์และใช้เฉพาะฟังก์ชันสมาชิกของคลาส หากมีจำนวน 0 และ 1 เท่ากันในอาร์เรย์ ก็จะคืนค่า -1
ดังนั้น ถ้าอินพุตเหมือนกับ array =[0, 1, 1, 0, 1, 1, 1, 0] แล้วผลลัพธ์จะเป็น 2 ในดัชนี 2 ของอาร์เรย์ ค่าจะเป็น 1 ซึ่งเป็นค่าที่บ่อยที่สุด ค่าในอาร์เรย์ ในทำนองเดียวกัน คำตอบที่ 1, 4, 5, 6 ก็เป็นจริงเช่นกันเพราะดัชนีมีค่า 1 ด้วย
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n:=length()
-
กรุ๊ปA :=1
-
groupB :=0
-
aIdx :=null
-
bidx :=null
-
ครั้งแรก:=:=แบบสอบถาม(0, 1, 2, 3)
-
วินาที :=แบบสอบถาม(0, 1, 2, 4)
-
สำหรับผมอยู่ในช่วง 4 ถึง n ทำ
-
หากการสืบค้น (0, 1, 2, i) เหมือนกับครั้งแรกแล้ว
-
groupA:=groupA+1
-
aIdx :=ผม
-
-
มิฉะนั้น
-
groupB:=groupB+1
-
bIdx :=ผม
-
-
-
สำหรับผมอยู่ในช่วง 0 ถึง 2 ทำ
-
nxt :=รายการใหม่
-
สำหรับ v ในช่วง 1 ถึง 4 ทำ
-
ถ้า v ไม่เหมือนกับ i แล้ว
-
เติม v ต่อท้าย nxt
-
-
-
หากการสืบค้น (ค่าของ nxt) เหมือนกับวินาที ดังนั้น
-
groupA:=groupA + 1
-
aIdx :=ผม
-
-
มิฉะนั้น
-
groupB:=groupB+1
-
bIdx :=ผม
-
-
-
ถ้า groupA>groupB แล้ว
-
ส่งคืน aIdx
-
-
มิฉะนั้น ถ้า groupB>groupA แล้ว
-
ส่งคืน aIdx
-
-
มิฉะนั้น
-
กลับ -1
-
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class TestArray: def __init__(self, array) -> None: self.__arr = array def length(self): return len(self.__arr) def query(self, p, q, r, s): val = self.__arr[p] + self.__arr[q] + self.__arr[r] + self.__arr[s] if val == 4 or val == 0: return 4 elif val == 1 or val == 3: return 2 elif val == 2: return 0 def solve(reader): n,groupA,groupB,aIdx,bIdx=reader.length(),1,0,None,None first,second=reader.query(0,1,2,3),reader.query(0,1,2,4) for i in range(4,n): if reader.query(0,1,2,i)==first: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i for i in range(3): nxt=[v for v in [0,1,2,3,4] if v!=i] if reader.query(*nxt)==second: groupA,aIdx=groupA+1,i else: groupB,bIdx=groupB+1,i return aIdx if groupA>groupB else bIdx if groupB>groupA else -1 arr_ob = TestArray([0, 1, 1, 0, 1, 1, 1, 0]) print(solve(arr_ob))
อินพุต
[0, 1, 1, 0, 1, 1, 1, 0]
ผลลัพธ์
2