Amazon Interview Question
Quality Assurance EngineersTeam: Kindle
Country: India
Interview Type: Written Test
def revRange(array):
revArray = []
for k in range(1, len(array)+1):
k = k*(-1)
revArray.append(array[k])
return (revArray)
def revSubSet(l, N):
x = 0
rev_Sub_Set = []
for i in range(1,(len(l)//N)+1):
subSet = []
for j in range(x,N*i):
subSet.append(l[j])
x = N*i
y = (subSet)
rev_Sub_Set = rev_Sub_Set + y
subSet = []
leftOuts = []
for p in range(0, len(l)):
if l[p] not in rev_Sub_Set:
leftOuts.append(l[p])
if len(leftOuts) > 0:
y = revRange(leftOuts)
rev_Sub_Set = rev_Sub_Set + y
return (rev_Sub_Set)
l = [1,2,3,4,5,6,7,8,9]
N = 3
print (revSubSet(l,N))
def revRange(array):
revArray = []
for k in range(1, len(array)+1):
k = k*(-1)
revArray.append(array[k])
return (revArray)
def revSubSet(l, N):
x = 0
rev_Sub_Set = []
for i in range(1,(len(l)//N)+1):
subSet = []
for j in range(x,N*i):
subSet.append(l[j])
x = N*i
y = (subSet)
rev_Sub_Set = rev_Sub_Set + y
subSet = []
leftOuts = []
for p in range(0, len(l)):
if l[p] not in rev_Sub_Set:
leftOuts.append(l[p])
if len(leftOuts) > 0:
y = revRange(leftOuts)
rev_Sub_Set = rev_Sub_Set + y
return (rev_Sub_Set)
l = [1,2,3,4,5,6,7,8,9]
N = 3
print (revSubSet(l,N))
def revertSubsetList(l,n,res=[]):
for i in range(1, len(l)/n+1):
for j in range(1,n+1):
res += [ l[i*n-j] ]
return res
print revertSubsetList([1,2,3,4,5,6,7,8,9,10,11,12], 3)
#include <vector>
#include <iostream>
int main()
{
std::vector<int> input { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const int REVERSE_SIZE = 3;
int front = 0;
int swaps = 0;
while( front < input.size() )
{
int back = front + ((REVERSE_SIZE - (swaps * 2) - 1));
if( back >= input.size() )
{
break;
}
std::swap( input[front], input[back] );
++swaps;
++front;
if( swaps == (REVERSE_SIZE / 2.0) )
{
front += REVERSE_SIZE / 2.0;
swaps = 0;
}
else if ( swaps == (REVERSE_SIZE / 2 ) ) // implicit truncation
{
front += (REVERSE_SIZE / 2.0) + 0.5;
swaps = 0;
}
}
for( const auto& num : input )
{
std::cout << "\n" << num;
}
}
In python:
def revert_by_n(in_lst, n):
result = []
ndx = 0
lst_ndx = min(len(in_lst), ndx + n)
while ndx < len(in_lst):
for i in xrange(lst_ndx, ndx, -1):
result.append(in_lst[i - 1])
if lst_ndx >= len(in_lst) + 1:
break
ndx += n
lst_ndx = min(len(in_lst), lst_ndx + n)
return result
Test:
tst = [
([1,2,3,4,5,6,7,8,9], 3, [3,2,1,6,5,4,9,8,7]),
([1,2,3,4,5,6,7,8], 3, [3,2,1,6,5,4,8,7]),
([1, 2, 3], 2, [2, 1, 3]),
([1, 2, 3], 4, [3, 2, 1]),
([1, 2, 3], 1, [1, 2, 3]),
]
for in_lst, n, exp in tst:
res = revert_by_n(in_lst, n)
assert res == exp, 'in: {}, n: {} -> {} != {}'.format(in_lst, n, res, exp)
print '{}: {} -> {}'.format(in_lst, n, res)
private static void rev(int[] input,int n)
{
if(input==null || input.length<2 || n<2 ||input.length<n)
return ;
int i=0;
int curEnd = n;
int j = curEnd-1;
while(i>=0&& j<input.length&& i<input.length)
{
int temp = input[i];
input[i] = input[j];
input[j] = temp;
i++;
j--;
if(i>=j-1)
{
i = curEnd;
curEnd = i+n;
j = curEnd-1;
}
}
}
private static void rev(int[] input,int n)
{
if(input==null || input.length<2 || n<2 ||input.length<n)
return ;
int i=0;
int curEnd = n;
int j = curEnd-1;
while(i>=0&& j<input.length&& i<input.length)
{
int temp = input[i];
input[i] = input[j];
input[j] = temp;
i++;
j--;
if(i>=j-1)
{
i = curEnd;
curEnd = i+n;
j = curEnd-1;
}
}
}
public class Solution {
public static void main(String[] args) {
Integer[] a = {1,2,3,4,5,6,7,8,9};
printArray(getReversedNSectionArray(a, 3));
}
private static void printArray(Integer[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static Integer[] getReversedNSectionArray(Integer[] a, int n) {
if (a == null || n > a.length || n < 1) {
return null;
}
if (n == 1) {
return a;
}
int len = a.length;
// if n = len just return reversed array
if (n == len) {
return (Integer[]) Arrays.asList(a).stream().sorted((f1, f2) -> Integer.compare(f2, f1) * -1).toArray();
}
int s = -1; // sector size
int rem = len; // remaining elements
int i = 0;
int j = 0;
int k = 0;
while (i < len) {
s = (n > rem) ? rem : n; // possible sector size
j = i;
k = i + s - 1;
while (j < k) {
swap(a, j, k);
j++;
k--;
}
i += s;
rem -= s;
}
return a;
}
private static void swap(Integer[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
import java.util.Objects;
public class ArrayUtil {
public static void reverseArray(int arr[], int k) {
if (Objects.isNull(arr) || arr.length == 1 || k <= 1 || k > arr.length)
return;
int length = arr.length;
int iter = length / k;
int start, stop;
for (int i = 0; i < iter; i++) {
start = i * k;
stop = ((i + 1) * k) - 1;
reverse(arr, start, stop);
}
int rem = length % k;
start = (length - rem);
stop = length - 1;
reverse(arr, start, stop);
}
private static void reverse(int arr[], int start, int stop) {
while (start < stop) {
swap(arr, start, stop);
start++;
stop--;
}
}
private static void swap(int arr[], int start, int stop) {
int temp = arr[start];
arr[start] = arr[stop];
arr[stop] = temp;
}
}
public class reverseSubarray {
public static void main(String[] args) {
int arr[]= {3, 2, 1, 6, 5, 4, 9, 8, 7,11, 10};
for (int i =0; i<arr.length;i+=2){
for (int j = i+1;j>i;j--){
if(j>arr.length-1)
break;
int temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
System.out.println(arr[i] + " - " + arr[j]);
//System.out.println(arr[j]);
}
}
System.out.println(arr[arr.length-1]);
}
}
public class ArrayReverseProblem {
public static void main(String[] args) {
int inputArray[] = {1,2,3,4,5,6,7,8,9};
int revreseIndex=3;
int NextrevreseIndex=revreseIndex+3;
int FinalrevreseIndex=NextrevreseIndex+3;
String first = "",second="",third="";
for(int i=1;i<=inputArray.length;){
if(i<=revreseIndex){
first+=inputArray[revreseIndex-i]+",";
}
if((i<=revreseIndex)){
second+=inputArray[NextrevreseIndex-i]+",";
}
if((i<=revreseIndex)){
third+=inputArray[FinalrevreseIndex-i]+",";
}
++i;
}
System.out.println("["+first+second+third.substring(0, third.length()-1)+"]");
}
}
#include <array>
#include <iostream>
int main()
{
std::array<int, 9> input { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const int REVERSE_SIZE = 3;
const int ORIGINAL_FRONT = 0;
int front = ORIGINAL_FRONT;
int back = ORIGINAL_FRONT + (REVERSE_SIZE - 1);
while( back < input.size() )
{
int next_front = front + REVERSE_SIZE;
while( front < back )
{
std::swap( input[front++], input[back--] );
}
front = next_front;
back = front + (REVERSE_SIZE - 1);
}
for( const auto& num : input )
{
std::cout << num << "\n" ;
}
}
public class ReverseSubset {
public static void main(String[] args) {
int arr[] = {1,2,3,4,5,6,7,8};
int N =5;
int l = arr.length;
int end = (N-1)/2;
int i,temp,k=0;
for(i=0;i<end;i++)
{
temp= arr[i];
arr[i]=arr[N-k-1];
arr[N -k-1]=temp;
k++;
}
for(i=0;i<l;i++)
System.out.println(arr[i]);
}
}
public class ReverseSubset {
public static void main(String[] args) {
int arr[] = {1,2,3,4,5,6,7,8};
int N =5;
int l = arr.length;
int end = (N-1)/2;
int i,temp,k=0;
for(i=0;i<end;i++)
{
temp= arr[i];
arr[i]=arr[N-k-1];
arr[N -k-1]=temp;
k++;
}
for(i=0;i<l;i++)
System.out.println(arr[i]);
}
}
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char const *argv[]) {
int v[] ={1,2,3,4,5,6,7,8,9};
int temp = 0,size = 3;
for (int i = 0; i < 9; i = i + 3) {
temp = v[i];
v[i] = v[size - i - 1];
v[size - i - 1] = temp;
size = size + 6;
}
for (int i = 0; i < 9; i++) {
printf("%d\n", v[i]);
}
return 0;
}
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char const *argv[]) {
int v[] ={1,2,3,4,5,6,7,8,9};
int temp = 0,size = 3;
for (int i = 0; i < 9; i = i + 3) {
temp = v[i];
v[i] = v[size - i - 1];
v[size - i - 1] = temp;
size = size + 6;
}
for (int i = 0; i < 9; i++) {
printf("%d\n", v[i]);
}
return 0;
}
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char const *argv[]) {
int v[] ={1,2,3,4,5,6,7,8,9};
int temp = 0,size = 3;
for (int i = 0; i < 9; i = i + 3) {
temp = v[i];
v[i] = v[size - i - 1];
v[size - i - 1] = temp;
size = size + 6;
}
for (int i = 0; i < 9; i++) {
printf("%d\n", v[i]);
}
return 0;
}
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char const *argv[]) {
int v[] ={1,2,3,4,5,6,7,8,9};
int temp = 0,size = 3;
for (int i = 0; i < 9; i = i + 3) {
temp = v[i];
v[i] = v[size - i - 1];
v[size - i - 1] = temp;
size = size + 6;
}
for (int i = 0; i < 9; i++) {
printf("%d\n", v[i]);
}
return 0;
}
#include <vector>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char const *argv[]) {
int v[] ={1,2,3,4,5,6,7,8,9};
int temp = 0,size = 3;
for (int i = 0; i < 9; i = i + 3) {
temp = v[i];
v[i] = v[size - i - 1];
v[size - i - 1] = temp;
size = size + 6;
}
for (int i = 0; i < 9; i++) {
printf("%d\n", v[i]);
}
return 0;
}
This code will give performance of O(n/2).
public static void reverseSubset(int[] a, int k){
System.out.println("reversing array "+a+" with "+k);
if(a.length > k){
int lo = 0;
int hi = k-1;
while(lo<hi) {
reverse(a, lo, hi);
lo = hi+1;
hi = lo+k-1;
hi = Math.min(hi,a.length-1);
}
}
}
private static void reverse(int[] a, int lo, int hi) {
System.out.println("reverse(a, "+lo+", "+hi+")");
while(lo<hi){
swap(a,lo++,hi--);
}
}
private static void swap(int[] a, int i, int j) {
System.out.println("swap(a, "+i+", "+j+")");
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13};
reverseSubset(a,2);
reverseSubset(a,3);
reverseSubset(a,4);
reverseSubset(a,5);
}
Here are the sysout on running main
reversing array [I@511d50c0 with 2
reverse(a, 0, 1)
swap(a, 0, 1)
reverse(a, 2, 3)
swap(a, 2, 3)
reverse(a, 4, 5)
swap(a, 4, 5)
reverse(a, 6, 7)
swap(a, 6, 7)
reverse(a, 8, 9)
swap(a, 8, 9)
reverse(a, 10, 11)
swap(a, 10, 11)
reversing array [I@511d50c0 with 3
reverse(a, 0, 2)
swap(a, 0, 2)
reverse(a, 3, 5)
swap(a, 3, 5)
reverse(a, 6, 8)
swap(a, 6, 8)
reverse(a, 9, 11)
swap(a, 9, 11)
reversing array [I@511d50c0 with 4
reverse(a, 0, 3)
swap(a, 0, 3)
swap(a, 1, 2)
reverse(a, 4, 7)
swap(a, 4, 7)
swap(a, 5, 6)
reverse(a, 8, 11)
swap(a, 8, 11)
swap(a, 9, 10)
reversing array [I@511d50c0 with 5
reverse(a, 0, 4)
swap(a, 0, 4)
swap(a, 1, 3)
reverse(a, 5, 9)
swap(a, 5, 9)
swap(a, 6, 8)
reverse(a, 10, 12)
swap(a, 10, 12)
This will give performance of O(n/2)
/**
* Created by pJain on 5/27/16.
*/
public class ReverseArraySubSet {
public static void reverseSubset(int[] a, int k){
System.out.println("reversing array "+a+" with "+k);
if(a.length > k){
int lo = 0;
int hi = k-1;
while(lo<hi) {
reverse(a, lo, hi);
lo = hi+1;
hi = lo+k-1;
hi = Math.min(hi,a.length-1);
}
}
}
private static void reverse(int[] a, int lo, int hi) {
System.out.println("reverse(a, "+lo+", "+hi+")");
while(lo<hi){
swap(a,lo++,hi--);
}
}
private static void swap(int[] a, int i, int j) {
System.out.println("swap(a, "+i+", "+j+")");
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13};
reverseSubset(a,2);
reverseSubset(a,3);
reverseSubset(a,4);
reverseSubset(a,5);
}
}
class ReverseArray {
public static void arrayWithSubsetN(int[] array, int n) {
int i = 0;
while (i < array.length) {
int start = i;
int j = i;
int end = (i + n) - 1;
boolean flag = false;
for (j = i ; j < end && end < array.length; j++) {
if (array[j] > array[j + 1]) {
flag = false;
break;
}
flag = true;
}
if (flag) {
while (start < end) {
int tmp = array[start];
array[start] = array[end];
array[end] = tmp;
start++;
end--;
}
i = ((i + n) - 1) + 1;
continue;
}
i++;
}
}
}
public class ArrayReverse {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10,12};
ReverseArray.arrayWithSubsetN(array, 3);
for (int i = 0; i< array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
#include<iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 6, 7, 8, 9, 5, 4, 12, 15, 18, 17, 25, 20};
int s = sizeof(arr)/sizeof(arr[0]);
int k=0;
cout << " Enter k : ";
cin >> k;
for(int i=0; i<(s/k); i++) {
int t=0;
for(int j=(i*k); j< (i*k) + k/2; j++) {
int l = arr[j+t];
arr[j+t] = arr[j+k-1-t];
arr[j+k-1-t] = l;
t++;
}
}
return 0;
}
public class ReverseInSubsets {
public static void main(String args[])
{
int arr[]={1,2,3,4,5,6,7,8,9};
int n=4;
int temp=0;
for(int i=0;i<arr.length;i=i+n)
{
int j=i;
int k=n+i-1;
while(j<=k&&j<arr.length)
{
if(k>=arr.length)
{
k--;
}
else{
temp=arr[j];
arr[j]=arr[k];
arr[k]=temp;
j++;
k--;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
}
public class ReverseInSubsets {
public static void main(String args[])
{
int arr[]={1,2,3,4,5,6,7,8,9};
int n=4;
int temp=0;
for(int i=0;i<arr.length;i=i+n)
{
int j=i;
int k=n+i-1;
while(j<=k&&j<arr.length)
{
if(k>=arr.length)
{
k--;
}
else{
temp=arr[j];
arr[j]=arr[k];
arr[k]=temp;
j++;
k--;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
}
public class ReverseInSubsets {
public static void main(String args[])
{
int arr[]={1,2,3,4,5,6,7,8,9};
int n=4;
int temp=0;
for(int i=0;i<arr.length;i=i+n)
{
int j=i;
int k=n+i-1;
while(j<=k&&j<arr.length)
{
if(k>=arr.length)
{
k--;
}
else{
temp=arr[j];
arr[j]=arr[k];
arr[k]=temp;
j++;
k--;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
}
public class ReverseSet {
public static void main(String[] args) {
ArrayList<Integer> a= new ArrayList();
int aa [] = {1,2,3,4,5,6,7,8,9};
int n ;
Scanner in = new Scanner(System.in);
System.out.println("Input n");
n = in.nextInt();
int r =0;
int p=n;
loopu:
while(true){
int b[] =Arrays.copyOfRange(aa, r, n);
for (int i=p-1;i>=0;i--){
System.out.print(b[i]);;
a.add(b[i]);
}
r=n;
n= n+p;
if (n>aa.length)
{break loopu;}
}
System.out.println(a);
}
}
public class ReverseSet {
public static void main(String[] args) {
ArrayList<Integer> a= new ArrayList();
int aa [] = {1,2,3,4,5,6,7,8,9};
int n ;
Scanner in = new Scanner(System.in);
System.out.println("Input n");
n = in.nextInt();
int r =0;
int p=n;
loopu:
while(true){
int b[] =Arrays.copyOfRange(aa, r, n);
for (int i=p-1;i>=0;i--){
System.out.print(b[i]);;
a.add(b[i]);
}
r=n;
n= n+p;
if (n>aa.length)
{break loopu;}
}
System.out.println(a);
}
}
Python code for solving this problem , The idea is to slice the list with N and create subarrays of length N , reverse it and then return the array
import itertools
def reversesubset(l,n):
x =[]
for i in xrange(0,len(l),n):
y =l[i:(i+n)]
y.reverse()
x.append(y)
print list(itertools.chain(*x))
reversesubset([1,2,3,4,5,6,7,8,9,10,11,12], 3)
package test;
import java.util.Arrays;
public class AmazonReverseSubSet {
public static void main(String[] args) {
int[] x = { 9, 2, 4, 7, 3, 7, 12, 15, 10 };
int n = 4;
process (x, n);
}
public static void process (int[] array, int n){
int indexRight=n-1;
int totalIterations= (n/2);
for (int left=0,rigth=totalIterations; rigth>0 && left<array.length;left++,rigth-- ){
int aux= array[indexRight];
array[indexRight] = array[left];
array[left] = aux;
indexRight--;
}
System.out.println(Arrays.toString(array));
}
}
void swap(int arr[],int i,int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[6] = {2,4,6,8,3,67};
int size = 6;
int swapcount =2;
for(int j=0;j<size;j=j+swapcount)
{
int i =j;
int maxswap = i+ swapcount-1;
while(maxswap>size-1)
{
maxswap--;
}
while(i<maxswap)
{
swap(arr,i++,maxswap--);
}
}
return 0;
}
void swap(int arr[],int i,int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[6] = {2,4,6,8,3,67};
int size = 6;
int swapcount =2;
for(int j=0;j<size;j=j+swapcount)
{
int i =j;
int maxswap = i+ swapcount-1;
while(maxswap>size-1)
{
maxswap--;
}
while(i<maxswap)
{
swap(arr,i++,maxswap--);
}
}
return 0;
}
void swap(int arr[],int i,int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[6] = {2,4,6,8,3,67};
int size = 6;
int swapcount =2;
for(int j=0;j<size;j=j+swapcount)
{
int i =j;
int maxswap = i+ swapcount-1;
while(maxswap>size-1)
{
maxswap--;
}
while(i<maxswap)
{
swap(arr,i++,maxswap--);
}
}
return 0;
}
public class ReverseArraySubSet {
private static Scanner in;
public static void main(String args[]) {
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
System.out.println("The array is:");
for (int x = 0; x < array.length; x++) {
System.out.print(" "+array[x]);
}
System.out.println();
System.out.println("Enter the size of subset to be reversed. it should be be less than array size");
in = new Scanner(System.in);
int n = in.nextInt();
int i = 0;
int j = n - 1;
while (i < n / 2) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
System.out.println("Print the array");
for (int x = 0; x < array.length; x++) {
System.out.print(" "+array[x]);
}
}
}
public class ReverseArraySubSet {
private static Scanner in;
public static void main(String args[]) {
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
System.out.println("The array is:");
for (int x = 0; x < array.length; x++) {
System.out.print(" "+array[x]);
}
System.out.println();
System.out.println("Enter the size of subset to be reversed. it should be be less than array size");
in = new Scanner(System.in);
int n = in.nextInt();
int i = 0;
int j = n - 1;
while (i < n / 2) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
System.out.println("Print the array");
for (int x = 0; x < array.length; x++) {
System.out.print(" "+array[x]);
}
}
}
public class ReverseArraySubset {
public static void main(String[] args) {
int[] inp = {1,2,3,4,5,6,7,8,9};
int length = inp.length;
int n = 3;
for(int a : inp)
System.out.print(a + "\t");
System.out.println();
inp = reverse(inp,n);
for(int a : inp)
System.out.print(a + "\t");
}
static int[] reverse(int[] arr, int n) {
int i=0;
while(i<=arr.length-1) {
int j = i+n-1;
int k=j;
while(i<j && j<=arr.length-1) {
swap(arr, i , j);
i++;
j--;
}
i = k + 1;
}
return arr;
}
static void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
public class Resverse_arr_subsetofN {
public static void main(String[] args) {
int[] myIntArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int subset = 3;
int i = 0;
while (i <= myIntArray.length - 1) {
int j = 0;
ArrayList<Integer> mySubArray = new ArrayList<Integer>();
while (j < subset) {
mySubArray.add(myIntArray[i]);
j++;
i++;
}
for ( int k = mySubArray.size()-1 ; k >= 0 ; k-- )
{
System.out.print(mySubArray.get(k)+" ");
}
System.out.println();
}
}
}
Time -O(n) ...Actually less than that
public class ArraYRevKth {
/**
* @param args
*/
public static void main(String[] args) {
int k = 5;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
int k1 = k;
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (i + k >= arr.length) {
k = arr.length - i - 1;
}
int temp = arr[i + k];
arr[i + k] = arr[i];
arr[i] = temp;
k = k - 2;
index++;
if (k <= 0) {
i = i + index;
k = k1;
index = 0;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
import java.io.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
int[] arr = {1,2,3,4,5,6,7,8,9};
int k =3;
int[] res = rev(arr,k);
for(int i =0; i<res.length;i++){
System.out.println(res[i]);
}
}
public static int[] rev(int[] nums, int n){
for(int i=0; i<nums.length; i=i+n){
int j = i+n-1;
// System.out.println(nums[i] + " and j value is " + nums[j]);
int k =i;
while(k<=j){
int temp = nums[k];
nums[k] = nums[j];
nums[j] = temp;
j--;
k++;
}
}
return nums;
}
}
import java.io.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
int[] arr = {1,2,3,4,5,6,7,8,9};
int k =3;
int[] res = rev(arr,k);
for(int i =0; i<res.length;i++){
System.out.println(res[i]);
}
}
public static int[] rev(int[] nums, int n){
for(int i=0; i<nums.length; i=i+n){
int j = i+n-1;
// System.out.println(nums[i] + " and j value is " + nums[j]);
int k =i;
while(k<=j){
int temp = nums[k];
nums[k] = nums[j];
nums[j] = temp;
j--;
k++;
}
}
return nums;
}
}
public void reverseArrN(int[] a, int n){
int len = a.length; //9-3=6
//int k = n-1;
if(a.length==0){
System.out.println("empty array");
}
else if(a.length==1){
System.out.println("Array has only 1 element");
}
else if(a.length<n){
System.out.println("reverse entire array or invalid usecase a n cannot be greater than length of array.");
}
else{
for(int i=0;i<len;i+=n-1){
int k = i + (n-1);
while(i<k && k<len){
int temp = a[i];
a[i] = a[k];
a[k] = temp;
k--;i++;
}
}
}
}
Time: O(n). Space: O(1).
public static void swap(Integer[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static Integer[] reverse(Integer[] arr, int n) {
int parts = arr.length/n;
int k;
int j;
for(int i=0;i<parts;i++) {
k=n-1;
j=0;
while(j<k) {
if((i*n+k)>=arr.length) {
k--;
}else {
swap(arr,i*n+(j++), i*n+(k--));
}
}
}
return arr;
}
Java solution, complexity O(n * k):
- techinterviewquestion.com May 23, 2016