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

โปรแกรมค้นหาดัชนีขององค์ประกอบที่พบบ่อยที่สุดในอาร์เรย์ที่ซ่อนอยู่ในPython


สมมติว่าเราได้รับคลาสที่เรียกว่า '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