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

ตรวจสอบว่าการย้อนกลับของอาร์เรย์ย่อยทำให้อาร์เรย์ที่เรียงลำดับในPython


สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums ซึ่งมีองค์ประกอบเฉพาะ เราต้องตรวจสอบว่าอาร์เรย์จะถูกจัดเรียงหรือไม่หลังจากย้อนกลับหนึ่งอาร์เรย์ย่อยของอาร์เรย์นั้น หากจัดเรียงอาร์เรย์แล้ว ให้คืนค่า true ด้วย

ดังนั้นหากอินพุตมีค่าเท่ากับ nums =[4,6,27,25,15,9,37,42] ผลลัพธ์จะเป็น True เพราะหากเราย้อนกลับ [9,15,25,27] แสดงว่าอาร์เรย์ จะถูกจัดเรียง

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

  • n :=ขนาดของ nums
  • หากอาร์เรย์มีองค์ประกอบเพียงตัวเดียว ให้คืนค่า True
  • ผม :=1
  • สำหรับฉันในช่วง 1 ถึง n - 1 ทำ
    • ถ้า nums[i - 1]
    • ถ้าฉันเหมือนกับ n ให้คืนค่า จริง ไม่เช่นนั้นให้ออกจากลูป
  • j :=ฉัน
  • ในขณะที่ j
  • ถ้า i> 1 และ nums[j]
  • j :=j + 1
  • ถ้า j เหมือนกับ n ให้คืนค่า True
  • k :=เจ
  • ถ้า nums[k]
  • ในขณะที่ k> 1 และ k
  • ถ้า nums[k]
  • k :=k + 1
  • คืนค่า True
  • ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    โค้ดตัวอย่าง

    def solve(nums):
       n = len(nums)
       if n == 1:
          return True
     
       i = 1
       for i in range(1, n):
          if nums[i - 1] < nums[i] :
             if i == n:
               return True
          else:
             break
       j = i
       
       while j < n and nums[j] < nums[j - 1]:
          if i > 1 and nums[j] < nums[i - 2]:
             return False
          j += 1
     
       if j == n:
          return True
     
       k = j
       if nums[k] < nums[i - 1]:
          return False
     
       while k > 1 and k < n:
          if nums[k] < nums[k - 1]:
             return False
          k += 1
       return True
    
    nums = [4,6,27,25,15,9,37,42]
    print(solve(nums))

    อินพุต

    [4,6,27,25,15,9,37,42]

    ผลลัพธ์

    True