November 9, 2023

Viiisit [LeetCode] - 189. Rotate Array

#javascript#ruby

keep learning, keep coding!

Problem - Rotate Array

Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.

翻譯蒟蒻

給定一個整數陣列 nums,要求把陣列向右旋轉 k 步,其中 k 是非負整數。


Solution - JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
const newArr = [...nums];

for (let i = 0; i < nums.length; i++) {
const newIndex = (i + k) % nums.length;
nums[newIndex] = newArr[i];
}
};

建立新的 newArr,使用展開運算符 ... 將原始數組 nums 中的所有元素複製到 newArr 中。使得在修改原本陣列之前保留原本的元素順序。
nums[newIndex] = newArr[i]; 使用計算得到的新索引,將 newArr 中對應的元素賦值給原本 nums 中的新索引位置。

Solution - Ruby

Solution 1:

1
2
3
4
5
6
7
8
9
def rotate(nums, k)
# 建立新的 Array -> new_arr,内容與 nums 相同
new_arr = nums.dup

nums.length.times do |i|
new_index = (i + k) % nums.length
nums[new_index] = new_arr[i]
end
end

Solution 2:

1
2
3
def rotate(nums, k)
nums.rotate!(-k)
end

整個方法的作用是將陣列 nums 向左旋轉 k 步。在 Ruby 中,rotate! 方法會修改原始 Array,而不是傳回一個新的陣列。

LeetCode 傳送門 - Rotate Array