LeetCode/problems/rb/rotate-array.rb

69 lines
1.4 KiB
Ruby
Raw Normal View History

# @param {Integer[]} nums
# @param {Integer} k
# @return {Void} Do not return anything, modify nums in-place instead.
def rotate(nums, k)
def reverse(nums, from, to)
while from < to do
nums[from], nums[to] = nums[to], nums[from]
from += 1
to -= 1
end
end
k = k % nums.size
reverse(nums, 0, nums.size - 1)
reverse(nums, 0, k - 1)
reverse(nums, k, nums.size - 1)
end
RSpec.describe "rotate" do
it "nums = [1,2,3,4,5,6,7], k = 0" do
nums = [1,2,3,4,5,6,7]
k = 0
rotate(nums, k)
expect(nums).to eq([1,2,3,4,5,6,7])
end
it "nums = [1,2,3,4,5,6,7], k = 1" do
nums = [1,2,3,4,5,6,7]
k = 1
rotate(nums, k)
expect(nums).to eq([7,1,2,3,4,5,6])
end
it "nums = [1,2,3,4,5,6,7], k = 2" do
nums = [1,2,3,4,5,6,7]
k = 2
rotate(nums, k)
expect(nums).to eq([6,7,1,2,3,4,5])
end
it "nums = [1,2,3,4,5,6,7], k = 3" do
nums = [1,2,3,4,5,6,7]
k = 3
rotate(nums, k)
expect(nums).to eq([5,6,7,1,2,3,4])
end
it "nums = [-1,-100,3,99], k = 1" do
nums = [-1,-100,3,99]
k = 1
rotate(nums, k)
expect(nums).to eq([99,-1,-100,3])
end
it "nums = [-1,-100,3,99], k = 2" do
nums = [-1,-100,3,99]
k = 2
rotate(nums, k)
expect(nums).to eq([3,99,-1,-100])
end
end