Leetcode 189. Rotate Array
12 Jul 2024leetcode
medium
array
leetcode-top-interview
Leetcode Top Interview 150 的其中一題
題目描述
Given an integer array nums
, rotate the array to the right by k
steps, where k
is non-negative.
範例
Example 1:
Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]
Example 2:
Input: nums = [-1,-100,3,99], k = 2
Output: [3,99,-1,-100]
Explanation:
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]
Constraints:
- 1 <= nums.length <= 10^5
- -2^31 <= nums[i] <= 2^31 - 1
- 0 <= k <= 10^5
Follow Up
Try to come up with as many solutions as you can. There are at least three different ways to solve this problem. Could you do it in-place with $O(1)$ extra space?
解法
方法:檢查每個數字現在是否等於 val,是的話改成 100001,這樣排序後就會在最後面,不在列入檢查的陣列前面
func rotate(nums []int, k int) {
k = k % len(nums)
new := make([]int, 0)
for i:= len(nums) - k; i<len(nums); i++ {
new = append(new, nums[i])
}
for i:=0; i<len(nums)-k; i++ {
new = append(new, nums[i])
}
copy(nums, new)
}
Time complexity : O(n) Space complexity : O(n)