สมมติมี 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