leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

commit ee22a93d9a3c5ed779e1ee3d440e887f33aef3d5
parent 5501e17242ca51209b6971c6f2ce413240775406
Author: Jack Sangdahl <jack@pngu.org>
Date:   Wed, 11 Feb 2026 21:34:38 -0700

189. rotate array

Diffstat:
Arotate_array.c | 40++++++++++++++++++++++++++++++++++++++++
Arotate_array.py | 40++++++++++++++++++++++++++++++++++++++++
2 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/rotate_array.c b/rotate_array.c @@ -0,0 +1,40 @@ +// 189. Rotate Array +#include "leetcode.h" + +/* + * given an integer array 'nums', rotate the array to the right by 'k' stops, + * where 'k' is non-negative. + */ + +void reverse(int *nums, int start, int end) { + while (start < end) { + nums[start] ^= nums[end]; + nums[end] ^= nums[start]; + nums[start++] ^= nums[end--]; + } +} + +void rotate(int *nums, int numsSize, int k) { + int start = 0, end = numsSize - 1; + k %= numsSize; + reverse(nums, start, end - k); + reverse(nums, numsSize - k, end); + reverse(nums, start, end); +} + +int main() { + int n1[] = {1, 2, 3, 4, 5, 6, 7}, r1[] = {5, 6, 7, 1, 2, 3, 4}; + int n2[] = {-1, -100, 3, 99}, r2[] = {3, 99, -1, -100}; + rotate(n1, ARRAY_SIZE(n1), 3); + rotate(n2, ARRAY_SIZE(n2), 2); + for (int i = 0; i < ARRAY_SIZE(n1); i++) { + printf("%d ", n1[i]); + assert(r1[i] == n1[i]); + } + printf("\n"); + for (int i = 0; i < ARRAY_SIZE(n2); i++) { + printf("%d ", n2[i]); + assert(r2[i] == n2[i]); + } + printf("\n"); +} diff --git a/rotate_array.py b/rotate_array.py @@ -0,0 +1,40 @@ +# 189. Rotate Array + +""" +given an integer array 'nums', rotate the array to the right by 'k' stops, +where 'k' is non-negative. +""" + + +class Solution(object): + def reverse(self, nums, start, end): + while start < end: + tmp = nums[start] + nums[start] = nums[end] + nums[end] = tmp + start += 1 + end -= 1 + + 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 + if k < 0: + k += n + self.reverse(nums, 0, n - k - 1) + self.reverse(nums, n - k, n - 1) + self.reverse(nums, 0, n - 1) + + +if __name__ == "__main__": + obj = Solution() + n1 = [1, 2, 3, 4, 5, 6, 7] + n2 = [-1, -100, 3, 99] + obj.rotate(n1, k=3) + obj.rotate(n2, k=2) + print(n1) + print(n2)