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

ค้นหาคู่ของผลิตภัณฑ์ที่ระบุในรายการเชื่อมโยงแบบทวีคูณที่จัดเรียงใน Python


สมมติว่าเรามีรายการจำนวนบวกที่ไม่ซ้ำที่เรียงกันเป็นทวีคูณ เราต้องหาคู่ในรายการที่เชื่อมโยงเป็นสองเท่าซึ่งผลิตภัณฑ์นั้นเหมือนกับค่าที่กำหนด x เราต้องจำไว้ว่าสิ่งนี้จะได้รับการแก้ไขโดยไม่ต้องใช้พื้นที่เพิ่มเติม

ดังนั้น หากอินพุตเป็นเหมือน L =1 ⇔ 2 ⇔ 4 ⇔ 5 ⇔ 6 ⇔ 8 ⇔ 9 และ x =8 ผลลัพธ์จะเป็น (1, 8), (2, 4)

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • curr :=หัว nxt :=หัว

  • ในขณะที่ nxt.next ไม่ใช่ None ไม่ใช่ศูนย์ ให้ทำ

    • nxt :=nxt.next

  • พบ :=เท็จ

  • ในขณะที่ curr และ nxt ไม่เป็นโมฆะ และ curr และ nxt ต่างกันและ nxt.next ไม่ใช่ curr ให้ทำ

    • ถ้า (curr.data * nxt.data) เหมือนกับ x แล้ว

      • พบ :=จริง

      • แสดงคู่ curr.data, nxt.data

      • curr :=curr.next

      • nxt :=nxt.prev

    • มิฉะนั้น

      • if (curr.data * nxt.data)

        • curr :=curr.next

      • มิฉะนั้น

        • nxt :=nxt.prev

  • หากพบว่าเป็นเท็จ

    • แสดง "ไม่พบ"

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class ListNode:
   def __init__(self, data):
      self.data = data
      self.prev = None
      self.next = None
def insert(head, data):
   node = ListNode(0)
   node.data = data
   node.next = node.prev = None
   if (head == None):
      (head) = node
   else :
      node.next = head
      head.prev = node
      head = node
   return head
def get_pair_prod(head, x):
   curr = head
   nxt = head
   while (nxt.next != None):
      nxt = nxt.next
   found = False
   while (curr != None and nxt != None and curr != nxt and nxt.next != curr) :
      if ((curr.data * nxt.data) == x) :
         found = True
         print("(", curr.data, ", ", nxt.data, ")")
         curr = curr.next
         nxt = nxt.prev
      else :
         if ((curr.data * nxt.data) < x):
            curr = curr.next
         else:
            nxt = nxt.prev
   if (found == False):
      print( "Not found")
head = None
head = insert(head, 9)
head = insert(head, 8)
head = insert(head, 6)
head = insert(head, 5)
head = insert(head, 4)
head = insert(head, 2)
head = insert(head, 1)
x = 8
get_pair_prod(head, x)

อินพุต

head = None
head = insert(head, 9)
head = insert(head, 8)
head = insert(head, 6)
head = insert(head, 5)
head = insert(head, 4)
head = insert(head, 2)
head = insert(head, 1)
x = 8

ผลลัพธ์

( 1 , 8 )
( 2 , 4 )