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

ค้นหา Unsorted Subarray ที่มีความยาวต่ำสุด การจัดเรียงที่ทำให้อาร์เรย์ทั้งหมดถูกจัดเรียงใน Python


สมมติว่าเรามีอาร์เรย์ที่ไม่ได้จัดเรียง A[0..n-1] ขนาด n เราต้องหาความยาวต่ำสุดของอาร์เรย์ย่อย A[s..e] โดยการเรียงลำดับ อาร์เรย์ย่อยนี้ อาร์เรย์ทั้งหมดจะถูกจัดเรียง ดังนั้น หากอาร์เรย์เป็นแบบ [2,6,4,8,10,9,15] ผลลัพธ์จะเป็น 5 อาร์เรย์ย่อยจะเป็น [6,4,8,10,9]

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

  • res :=จัดเรียง nums เป็นอาร์เรย์

  • ตอบ :=0

  • ตั้งค่า r เป็นรายการที่เชื่อมโยง

  • สำหรับผมอยู่ในช่วง 0 ถึงความยาวของความละเอียด

    • ถ้า nums[i] ไม่เหมือนกับ res[i] ให้ใส่ i เข้าไปใน r

  • ถ้าความยาวของ r เป็น 0, ให้คืนค่า 0, ถ้าความยาวของ r เป็น 1 ให้คืนค่า 1

  • คืนค่าองค์ประกอบสุดท้ายของ r – องค์ประกอบแรกของ r + 1

ตัวอย่าง

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

class Solution(object):
   def findUnsortedSubarray(self, nums):
      res = sorted(nums)
      ans = 0
      r = []
      for i in range(len(res)):
         if nums[i] != res[i]:
            r.append(i)
      if not len(r):
         return 0
      if len(r) == 1:
         return 1
      return r[-1]-r[0]+1
ob1 = Solution()
print(ob1.findUnsortedSubarray([2,6,4,8,10,9,15]))

อินพุต

[2,6,4,8,10,9,15]

ผลลัพธ์

5