สมมติว่าเรามีอาร์เรย์ของค่าที่ไม่ซ้ำ n ค่า เราต้องตรวจสอบว่าอาร์เรย์นี้จัดเรียงและหมุนทวนเข็มนาฬิกาหรือไม่ ที่นี่จำเป็นต้องมีการหมุนอย่างน้อยหนึ่งครั้ง ดังนั้นอาร์เรย์ที่จัดเรียงอย่างสมบูรณ์ไม่ถือว่าเป็นการเรียงลำดับและหมุน
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[4,5,6,8,1,3] เอาต์พุตจะเป็น True เนื่องจากเราสามารถหมุนตามเข็มนาฬิกาได้สองครั้ง ผลลัพธ์จะถูกจัดเรียงเช่น [1, 3, 4, 5, 6, 8].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- min_element :=ค่าต่ำสุดของ nums
- min_index :=ดัชนีของ min_element เป็น nums
- before_sorted :=จริง
- สำหรับฉันในช่วง 1 ถึง min_index - 1 ทำ
- ถ้า nums[i]
- before_sorted :=เท็จ
- ออกมาจากลูป
- ถ้า nums[i]
- ถ้า nums[i]
- after_sorted :=เท็จ
- ออกมาจากลูป
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
def solve(nums): min_element = 999999 min_index = -1 min_element = min(nums) min_index = nums.index(min_element) before_sorted = True for i in range(1, min_index): if nums[i] < nums[i - 1]: before_sorted = False break after_sorted = True for i in range(min_index + 1, len(nums)): if nums[i] < nums[i - 1]: after_sorted = False break if before_sorted and after_sorted and nums[-1] < nums[0]: return True else: return False nums = [4,5,6,8,1,3] print(solve(nums))
อินพุต
[4,5,6,8,1,3]
ผลลัพธ์
True