import java.util.Arrays; public class Insight_Problem_01 { public static void main(String[] args) throws Exception { int[] target_array_01 = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int s = 2; int t = 6; int k = 1; // First Test Case // Example in blog post System.out.println("First Test Case"); System.out.print("Original Array" + "\t\t\t\t"); System.out.println(Arrays.toString(target_array_01)); System.out.print("Rotated Array with s: " + s + ", t: " + t + ", k: " + k + "\t"); System.out.println(Arrays.toString(k_right_rotate_array(target_array_01, s, t, k))); // Second Test Case // Change the k from 0 to target_array_01.length System.out.println("\n\nSecond Test Case"); System.out.print("Original Array" + "\t\t\t\t"); System.out.println(Arrays.toString(target_array_01)); for(k = 0 ; k <= target_array_01.length ; k++) { System.out.print("Rotated Array with s: " + s + ", t: " + t + ", k: " + k + "\t"); System.out.println(Arrays.toString(k_right_rotate_array(target_array_01, s, t, k))); } // Third Test Case // Target Array's size is one int[] target_array_02 = new int[]{1}; s = 0; t = 0; System.out.println("\n\nThird Test Case"); System.out.print("Original Array" + "\t\t\t\t"); System.out.println(Arrays.toString(target_array_02)); for(k = 0 ; k <= target_array_02.length ; k++) { System.out.print("Rotated Array with s: " + s + ", t: " + t + ", k: " + k + "\t"); System.out.println(Arrays.toString(k_right_rotate_array(target_array_02, s, t, k))); } } /* * Right rotate the sub array from s to t by k times * origin_array: original array * s: subarray's staring point * t: subarray ending point * k: rotate times * * Return: Array that is rotated in subarray * */ private static int[] k_right_rotate_array(int[] origin_array, int s, int t, int k) { // Test argument if(s < 0 && s >= origin_array.length && t < 0 && t >= origin_array.length && k < 0 && s > t && origin_array.length <= 0) { System.err.println("Please check arguments of k_right_rotate_array function in Insight_Problem_01 class"); } // Make new array int target_array[] = new int[origin_array.length]; System.arraycopy(origin_array, 0, target_array, 0, origin_array.length); // Make new array to copy from s to t two times int temp_array_size = t - s + 1; int[] temp_array = new int[temp_array_size*2]; System.arraycopy(target_array, s, temp_array, 0, temp_array_size); System.arraycopy(target_array, s, temp_array, temp_array_size, temp_array_size); // Find start point from new array int new_start_point = temp_array_size - (k % temp_array_size); // Assign the new array to original array System.arraycopy(temp_array, new_start_point, target_array, s, temp_array_size); // Return it return target_array; } } |