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

ตรวจสอบว่า Array สามารถเรียงลำดับได้โดยการ Rotate หรือไม่ด้วย Python


สมมติมี List nums ต้องเช็คว่า Rotate (ย้ายส่วนท้ายไปหน้า) ได้ Sorted Array หรือไม่

เช่น Input nums = [4,5,6,1,2,3] Output True (Rotate 3 ตัวท้ายไปหน้าได้ [1,2,3,4,5,6])

ขั้นตอนแก้:

  • ถ้า Sorted แล้ว Return True
  • หา Index i ที่ nums[i] > nums[i+1] (จุดหัก)
  • เช็คส่วนที่สอง (i+1 ถึงจบ) เรียงแล้วหรือไม่
  • เช็ค nums[-1] <= nums[0]

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

def solve(nums):
    n = len(nums)
    if all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)):
        return True
    else:
        status = True
        for i in range(n - 1):
            if nums[i] > nums[i + 1]:
                break
        i += 1
        for k in range(i, n - 1):
            if nums[k] > nums[k + 1]:
                status = False
                break
        if not status:
            return False
        else:
            if nums[n - 1] <= nums[0]:
                return True
            return False

nums = [4,5,6,1,2,3]
print(solve(nums))

Input

[4,5,6,1,2,3]

Output

True