Skip to content

Instantly share code, notes, and snippets.

@aniltv06
Created February 28, 2021 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aniltv06/b9a49703fc808463535d1e0ae6a07f61 to your computer and use it in GitHub Desktop.
Save aniltv06/b9a49703fc808463535d1e0ae6a07f61 to your computer and use it in GitHub Desktop.
Rotate Array
/*Given an array, rotate the array to the right by k steps, where k is non-negative.
Follow up:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Could you do it in-place with O(1) extra space?
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]
*/
class Solution {
func rotate(_ nums: inout [Int], _ k: Int) {
let newK = k % nums.count
print("newK = \(newK)")
//Reverse All
reverse(&nums, start: 0, end: nums.count-1)
//Reverse first K
reverse(&nums, start: 0, end: newK-1)
//Reverse last n-K
reverse(&nums, start: newK, end: nums.count-1)
}
func reverse(_ nums: inout [Int], start: Int, end: Int) {
var startInd = start
var endInd = end
while startInd < endInd {
//Using swapAt does the job, but time taken is more compared to assignment
//nums.swapAt(startInd, endInd)
let temp = nums[startInd]
nums[startInd] = nums[endInd]
nums[endInd] = temp
startInd += 1
endInd -= 1
}
}
var inp = [1,2,3,4,5,6,7]
Solution().rotate(&inp, 8)
print(inp)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment