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

Swap ขั้นต่ำเพื่อรวมกลุ่มทั้งหมด 1 ตัวใน Python


สมมติว่าเรามีข้อมูลอาร์เรย์แบบไบนารี เราต้องหาจำนวนสวอปขั้นต่ำที่จำเป็นในการจัดกลุ่ม 1 รายการที่จัดเก็บไว้ในอาร์เรย์ร่วมกันในตำแหน่งใดก็ได้ในอาร์เรย์ ดังนั้นหากอาร์เรย์เป็นเหมือน [1,0,1,0,1,0,0,1,1,0,1] ผลลัพธ์จะเป็น 3 วิธีแก้ปัญหาที่เป็นไปได้คือ [0,0,0,0, 0,1,1,1,1,1,1]

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

  • ตั้งค่าหนึ่ง :=0, n:=ความยาวของอาร์เรย์ข้อมูล
  • สร้างผลรวมอาร์เรย์ของขนาด n และเติมค่านี้ด้วย 0, set summ[0] :=data[0]
  • หนึ่ง :=หนึ่ง + ข้อมูล[0]
  • สำหรับ i ในช่วง 1 ถึง n – 1
    • summ[i] :=summ[i - 1] + data[i]
    • หนึ่ง :=หนึ่ง + data[i]
  • แทน :=หนึ่ง
  • ซ้าย :=0, ขวา :=หนึ่ง – 1
  • ขณะขวา
  • ถ้าเหลือ 0 แล้ว temp :=summ[right] หรือ temp :=summ[right] – summ[left - 1]
  • ans :=ขั้นต่ำของ ans หนึ่ง – ชั่วคราว
  • เพิ่มขวาและซ้าย 1
  • คืนสินค้า
  • ตัวอย่าง(Python)

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

    class Solution(object):
       def minSwaps(self, data):
          one = 0
          n = len(data)
          summ=[0 for i in range(n)]
          summ[0] = data[0]
          one += data[0]
          for i in range(1,n):
             summ[i] += summ[i-1]+data[i]
             one += data[i]
          ans = one
          left = 0
          right = one-1
          while right <n:
             if left == 0:
                temp = summ[right]
             else:
                temp = summ[right] - summ[left-1]
             ans = min(ans,one-temp)
             right+=1
             left+=1
          return ans
    ob = Solution()
    print(ob.minSwaps([1,0,1,0,1,0,0,1,1,0,1]))

    อินพุต

    [1,0,1,0,1,0,0,1,1,0,1]

    ผลลัพธ์

    3