From 734f7a4a042f68d4bc4fd8dd83ae6227f432a297 Mon Sep 17 00:00:00 2001 From: sangin-lee <92197656+sangin-lee@users.noreply.github.com> Date: Sun, 12 Dec 2021 01:54:12 +0900 Subject: [PATCH] Add Array Left Rotation (#2869) --- .../others/ArrayLeftRotation.java | 33 +++++++++++++ .../others/ArrayLeftRotationTest.java | 48 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/main/java/com/thealgorithms/others/ArrayLeftRotation.java create mode 100644 src/test/java/com/thealgorithms/others/ArrayLeftRotationTest.java diff --git a/src/main/java/com/thealgorithms/others/ArrayLeftRotation.java b/src/main/java/com/thealgorithms/others/ArrayLeftRotation.java new file mode 100644 index 00000000..e1dfa35f --- /dev/null +++ b/src/main/java/com/thealgorithms/others/ArrayLeftRotation.java @@ -0,0 +1,33 @@ +package com.thealgorithms.others; + +/* + * A left rotation operation on an array + * shifts each of the array's elements + * given integer n unit to the left. + * + * @author sangin-lee + */ + +public class ArrayLeftRotation { + + /* + * Returns the result of left rotation of given array arr and integer n + * + * @param arr : int[] given array + * + * @param n : int given integer + * + * @return : int[] result of left rotation + */ + public static int[] rotateLeft(int[] arr, int n) { + int size = arr.length; + int[] dst = new int[size]; + n = n % size; + for(int i = 0; i < size; i++) { + dst[i] = arr[n]; + n = (n + 1) % size; + } + return dst; + } + +} diff --git a/src/test/java/com/thealgorithms/others/ArrayLeftRotationTest.java b/src/test/java/com/thealgorithms/others/ArrayLeftRotationTest.java new file mode 100644 index 00000000..2efebb08 --- /dev/null +++ b/src/test/java/com/thealgorithms/others/ArrayLeftRotationTest.java @@ -0,0 +1,48 @@ +package com.thealgorithms.others; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ArrayLeftRotationTest { + + @Test + void testForOneElement() { + int[] arr = {3}; + int[] result = ArrayLeftRotation.rotateLeft(arr, 3); + assertArrayEquals(arr, result); + } + + @Test + void testForZeroStep() { + int[] arr = {3, 1, 5, 8, 6}; + int[] result = ArrayLeftRotation.rotateLeft(arr, 0); + assertArrayEquals(arr, result); + } + + @Test + void testForEqualSizeStep() { + int[] arr = {3, 1, 5, 8, 6}; + int[] result = ArrayLeftRotation.rotateLeft(arr, 5); + assertArrayEquals(arr, result); + } + + @Test + void testForLowerSizeStep() { + int[] arr = {3, 1, 5, 8, 6}; + int n = 2; + int[] expected = {5, 8, 6, 3, 1}; + int[] result = ArrayLeftRotation.rotateLeft(arr, n); + assertArrayEquals(expected, result); + } + + @Test + void testForHigherSizeStep() { + int[] arr = {3, 1, 5, 8, 6}; + int n = 7; + int[] expected = {5, 8, 6, 3, 1}; + int[] result = ArrayLeftRotation.rotateLeft(arr, n); + assertArrayEquals(expected, result); + } + +}