commit ee22a93d9a3c5ed779e1ee3d440e887f33aef3d5
parent 5501e17242ca51209b6971c6f2ce413240775406
Author: Jack Sangdahl <jack@pngu.org>
Date: Wed, 11 Feb 2026 21:34:38 -0700
189. rotate array
Diffstat:
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)