Interview Question
Country: Canada
Interview Type: In-Person
I think it will not work where an array is not a multiple of 3
For example:
Input array: {1,9,6,4,5,8,3,1}
//Compiled code. Run it as it is.
public class ReverseArray {
public int[] ReverseArrayInChunk(int[] arr){
int temp;
if(arr.length<3){
return arr;
}
for(int i=0;i<arr.length;i=i+3){
if(i+2<arr.length){
temp=arr[i];
arr[i]=arr[i+2];
arr[i+2]=temp;
}
}
return arr;
}
public static void main(String[] args){
int[] a= new int[]{1,2,3,4,5,6,7};
ReverseArray ra=new ReverseArray();
int[] b=ra.ReverseArrayInChunk(a);
for(int j=0;j<b.length;j++){
System.out.print(b[j]+", ");
}
}
}
Compiled Java code -
import java.util.Arrays;
public class SwapInThreeChunks {
public static void main(String[] args)
{
int[] input = {1,9,6,4,5,8,3,1,5,2,4,5};
for(int i=0, len=input.length; i<len; i++)
{
if(i+2 < len)
{
int temp = input[i];
input[i] = input[i+2];
input[i+2] = temp;
}
i += 2;
}
System.out.println(Arrays.toString(input));
}
}
/**
* Reverse number in each chunk of k items in an array
*/
private static void reverseChunk(int[] raw, int k) {
if (k <= 1) return;
for(int i=0; i<raw.length; i=i+k) {
reverseChunk(raw, i, k);
}
}
private static void reverseChunk(int[] raw, int start, int k) {
if (start >= raw.length - 1) {
return;
}
int end = Math.min(raw.length - 1, start + k - 1);
if (end == start) {
return;
}
int j = start;
while (j < end + start - j) {
int tmp = raw[j];
raw[j] = raw[end + start -j];
raw[end + start - j] = tmp;
j++;
}
}
/**
* Reverse number in each chunk of k items in an array
*/
private static void reverseChunk(int[] raw, int k) {
if (k <= 1) return;
for(int i=0; i<raw.length; i=i+k) {
reverseChunk(raw, i, k);
}
}
private static void reverseChunk(int[] raw, int start, int k) {
if (start >= raw.length - 1) {
return;
}
int end = Math.min(raw.length - 1, start + k - 1);
if (end == start) {
return;
}
int j = start;
while (j < end + start - j) {
int tmp = raw[j];
raw[j] = raw[end + start -j];
raw[end + start - j] = tmp;
j++;
}
}
hmmm ok... homework?
- S O U N D W A V E October 26, 2013