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

ลบคอลัมน์เพื่อทำการเรียงลำดับใน Python


สมมติว่าเรามีอาร์เรย์ของสตริงอักษรตัวพิมพ์เล็ก N ชื่ออาร์เรย์คือ A สตริงทั้งหมดมีความยาวเท่ากัน ตอนนี้ เราสามารถเลือกชุดของดัชนีการลบ และสำหรับแต่ละสตริง เราจะลบอักขระทั้งหมดในดัชนีเหล่านั้น

ตัวอย่างเช่น หากเรามีอาร์เรย์ A เช่น ["abcdef","uvwxyz"] และดัชนีการลบคือ {0, 2, 3} ดังนั้นอาร์เรย์สุดท้ายหลังการลบจะเป็น ["bef", "vyz"], และคอลัมน์ที่เหลือของ A คือ ["b","v"], ["e","y"] และ ["f","z"]

สมมติว่าเราเลือกชุดของดัชนีการลบ D เช่นเดียวกับหลังการลบ คอลัมน์ที่เหลือใน A แต่ละรายการจะเรียงลำดับแบบไม่ลดลง เราต้องหาค่าต่ำสุดที่เป็นไปได้ของความยาวของ D

ดังนั้น หากอินพุตเป็น ["cba","daf","ghi"] ผลลัพธ์จะเป็น 1 เนื่องจากหลังจากเลือก D ={1} แล้วแต่ละคอลัมน์ ["c","d" ,"g"] และ ["a","f","i"] อยู่ในการเรียงลำดับที่ไม่ลดลง และถ้าเราเลือก D ={} คอลัมน์ ["b","a","h"] จะไม่อยู่ในลำดับที่ไม่เรียงลำดับ

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

  • A =สร้างเมทริกซ์โดยนำสตริงจากอาร์เรย์และแยกอักขระออกเป็นคอลัมน์ที่แตกต่างกัน
  • B =รายการที่ว่างเปล่าใหม่
  • สำหรับ col in A ทำ
    • ถ้า col ถูกจัดเรียงแล้วให้ใส่ 0 ลงใน B
    • มิฉะนั้นให้แทรก 1 ลงใน B
  • คืนค่าผลรวมขององค์ประกอบทั้งหมดใน B

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

ตัวอย่าง

class Solution:
   def minDeletionSize(self, A):
      return sum([1-(sorted(col)==list(col)) for col in zip(*A)])
ob = Solution()
print(ob.minDeletionSize(["cba","daf","ghi"]))

อินพุต

["cba","daf","ghi"]

ผลลัพธ์

1