สมมติว่าเรามีอาร์เรย์ A เราต้องหมุนขวา k ขั้นตอน เช่นถ้าอาร์เรย์คือ A = [5, 7, 3, 6, 8, 1, 5, 4] และ k = 3 ผลลัพธ์จะเป็น [1,5,4,5,7,3,6,8] ขั้นตอนคือ:
- [4,5,7,3,6,8,1,5]
- [5,4,5,7,3,6,8,1]
- [1,5,4,5,7,3,6,8]
วิธีการแก้ปัญหา
- ให้ n เป็นขนาดของอาร์เรย์
- k = k mod n
- A = สับอาร์เรย์ของ A จาก n - k ถึงสุด + สับอาร์เรย์ของ A จาก 0 ถึง n - k - 1
ตัวอย่าง
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: None Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k %= n
nums[:] = nums[n-k:] + nums[:n-k]
nums = [5,7,3,6,8,1,5,4]
ob1 = Solution()
ob1.rotate(nums, 3)
print(nums)
อินพุต
nums = [5,7,3,6,8,1,5,4] k = 3
เอาต์พุต
[1,5,4,5,7,3,6,8]