Upload a easier version of reverse
This commit is contained in:
parent
39e29fbe05
commit
cb5097359b
Binary file not shown.
Binary file not shown.
|
@ -13,29 +13,25 @@ public class RecursiveExercise {
|
||||||
int head = MyArrayUtil.head(ht);
|
int head = MyArrayUtil.head(ht);
|
||||||
return MyArrayUtil.addAsFirst(head, l);
|
return MyArrayUtil.addAsFirst(head, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int[] reverse(int[] ht) throws Exception {
|
public static int[] reverse(int[] ht) throws Exception {
|
||||||
// fill your code here
|
// fill your code here
|
||||||
if(ht == null) return null;
|
if (ht == null)
|
||||||
|
return null;
|
||||||
if (ht.length == 1)
|
if (ht.length == 1)
|
||||||
return ht.clone();
|
return ht.clone();
|
||||||
int temp = ht[0];
|
return append(new int[] { ht[ht.length - 1] },
|
||||||
ht[0] = ht[ht.length - 1];
|
append(reverse(MyArrayUtil.tail(removeLast(ht.clone(), new int[ht.length - 1], 0))), new int[] { ht[0] }));
|
||||||
ht[ht.length - 1] = temp;
|
|
||||||
return recursiveInnerSandwich(reverse(MyArrayUtil.tail(removeLast(ht, new int[ht.length-1], 0))),ht.clone());
|
|
||||||
}
|
}
|
||||||
//This method make an array sandwich excluding the bread (index 0 and index last)
|
|
||||||
public static int[] recursiveInnerSandwich(int[] src,int[] dest) throws Exception{
|
// Remove the last element
|
||||||
if (src==null)return dest;
|
public static int[] removeLast(int[] ia1, int[] ia2, int i) {
|
||||||
dest[dest.length-src.length-1] = src[0];
|
ia2[i] = ia1[i];
|
||||||
recursiveInnerSandwich(MyArrayUtil.tail(src),dest);
|
if (i == ia2.length - 1)
|
||||||
return dest;
|
return ia2;
|
||||||
}
|
return removeLast(ia1, ia2, i + 1);
|
||||||
//Remove the last element
|
|
||||||
public static int[] removeLast(int[] ia1,int[] ia2,int i) {
|
|
||||||
ia2[i]=ia1[i];
|
|
||||||
if (i==ia2.length-1)return ia2;
|
|
||||||
return removeLast(ia1,ia2,i+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isIn(int x, int[] a) throws Exception {
|
public static boolean isIn(int x, int[] a) throws Exception {
|
||||||
// fill your code here
|
// fill your code here
|
||||||
if (a[0] == x)
|
if (a[0] == x)
|
||||||
|
@ -58,12 +54,15 @@ public class RecursiveExercise {
|
||||||
|
|
||||||
public static int[] shift(int[] ht, int n) throws Exception {
|
public static int[] shift(int[] ht, int n) throws Exception {
|
||||||
// fill your code here
|
// fill your code here
|
||||||
if(ht==null)return null;
|
if (ht == null)
|
||||||
if(n==0)return ht;
|
return null;
|
||||||
|
if (n == 0)
|
||||||
|
return ht;
|
||||||
int temp = ht[0];
|
int temp = ht[0];
|
||||||
ht = reverse(MyArrayUtil.addAsFirst(temp, reverse(MyArrayUtil.tail(ht))));
|
ht = reverse(MyArrayUtil.addAsFirst(temp, reverse(MyArrayUtil.tail(ht))));
|
||||||
return shift(ht,n-1);
|
return shift(ht, n - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
// test append, when appending empty array with {1,2,3}
|
// test append, when appending empty array with {1,2,3}
|
||||||
int[] a = null;
|
int[] a = null;
|
||||||
|
|
|
@ -0,0 +1,162 @@
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class RecursiveExerciseNoExtMethod {
|
||||||
|
|
||||||
|
// return an array that has all data of ht and n,
|
||||||
|
// just like concatenating ht and n.
|
||||||
|
public static int[] append(int[] ht, int[] n) throws Exception {
|
||||||
|
if (ht == null)
|
||||||
|
return n;
|
||||||
|
if (n == null)
|
||||||
|
return ht;
|
||||||
|
int[] l = append(MyArrayUtil.tail(ht), n);
|
||||||
|
int head = MyArrayUtil.head(ht);
|
||||||
|
return MyArrayUtil.addAsFirst(head, l);
|
||||||
|
}
|
||||||
|
public static int[] reverse(int[] ht) throws Exception {
|
||||||
|
// fill your code here
|
||||||
|
if(ht == null) return null;
|
||||||
|
if (ht.length == 1)
|
||||||
|
return ht.clone();
|
||||||
|
int temp = ht[0];
|
||||||
|
ht[0] = ht[ht.length - 1];
|
||||||
|
ht[ht.length - 1] = temp;
|
||||||
|
return recursiveInnerSandwich(reverse(MyArrayUtil.tail(removeLast(ht, new int[ht.length-1], 0))),ht.clone());
|
||||||
|
}
|
||||||
|
//This method make an array sandwich excluding the bread (index 0 and index last)
|
||||||
|
public static int[] recursiveInnerSandwich(int[] src,int[] dest) throws Exception{
|
||||||
|
if (src==null)return dest;
|
||||||
|
dest[dest.length-src.length-1] = src[0];
|
||||||
|
recursiveInnerSandwich(MyArrayUtil.tail(src),dest);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
//Remove the last element
|
||||||
|
public static int[] removeLast(int[] ia1,int[] ia2,int i) {
|
||||||
|
ia2[i]=ia1[i];
|
||||||
|
if (i==ia2.length-1)return ia2;
|
||||||
|
return removeLast(ia1,ia2,i+1);
|
||||||
|
}
|
||||||
|
public static boolean isIn(int x, int[] a) throws Exception {
|
||||||
|
// fill your code here
|
||||||
|
if (a[0] == x)
|
||||||
|
return true;
|
||||||
|
if (a.length == 1)
|
||||||
|
return false;
|
||||||
|
return isIn(x, MyArrayUtil.tail(a.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean subArray(int[] a1, int[] a2) throws Exception {
|
||||||
|
// fill your code here
|
||||||
|
if (a1 == null)
|
||||||
|
return true;
|
||||||
|
if (isIn(a1[0], a2))
|
||||||
|
return subArray(MyArrayUtil.tail(a1.clone()), a2);
|
||||||
|
if (a1.length == 1)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int[] shift(int[] ht, int n) throws Exception {
|
||||||
|
// fill your code here
|
||||||
|
if(ht==null)return null;
|
||||||
|
if(n==0)return ht;
|
||||||
|
int temp = ht[0];
|
||||||
|
ht = reverse(MyArrayUtil.addAsFirst(temp, reverse(MyArrayUtil.tail(ht))));
|
||||||
|
return shift(ht,n-1);
|
||||||
|
}
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
// test append, when appending empty array with {1,2,3}
|
||||||
|
int[] a = null;
|
||||||
|
int[] b = { 1, 2, 3 };
|
||||||
|
int[] ans1 = append(a, b);
|
||||||
|
System.out.println("Append - Expected: 1, 2, 3.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(ans1);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
// test append, when appending 2 non-empty arrays.
|
||||||
|
int[] c = { 1, 2, 3 };
|
||||||
|
int[] d = { 4, 5, 6 };
|
||||||
|
ans1 = append(c, d);
|
||||||
|
System.out.println("Append - Expected: 1, 2, 3, 4, 5, 6.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(ans1);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
// test reverse
|
||||||
|
int[] e = { 1, 2, 3, 4, 5 };
|
||||||
|
ans1 = reverse(e);
|
||||||
|
System.out.println("Reverse - Expected: 5, 4, 3, 2, 1.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(ans1);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
// test isIn
|
||||||
|
boolean b1 = isIn(3, e);
|
||||||
|
System.out.println("isIn - Expected: true.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
boolean b2 = isIn(7, e);
|
||||||
|
System.out.println("isIn - Expected: false.");
|
||||||
|
System.out.println("Get: " + b2 + ".");
|
||||||
|
|
||||||
|
// test subArray
|
||||||
|
int[] f = { 1, 3, 5 };
|
||||||
|
int[] g = { 1, 2, 3, 4, 5 };
|
||||||
|
int[] h = { 1, 2, 3, 4, 5 };
|
||||||
|
int[] i = null;
|
||||||
|
int[] j = { 1, 4, 5 };
|
||||||
|
|
||||||
|
b1 = subArray(f, g);
|
||||||
|
System.out.println("subArray - Expected: true.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
b1 = subArray(g, h);
|
||||||
|
System.out.println("subArray - Expected: true.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
b1 = subArray(i, h);
|
||||||
|
System.out.println("subArray - Expected: true.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
b1 = subArray(f, j);
|
||||||
|
System.out.println("subArray - Expected: false.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
b1 = subArray(h, j);
|
||||||
|
System.out.println("subArray - Expected: false.");
|
||||||
|
System.out.println("Get: " + b1 + ".");
|
||||||
|
|
||||||
|
// test shift
|
||||||
|
int[] k = shift(g, 3);
|
||||||
|
System.out.println("shift - Expected: 4, 5, 1, 2, 3.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(k);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
k = shift(g, 2);
|
||||||
|
System.out.println("shift - Expected: 3, 4, 5, 1, 2.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(k);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
k = shift(g, 8);
|
||||||
|
System.out.println("shift - Expected: 4, 5, 1, 2, 3.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(k);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
k = shift(g, 0);
|
||||||
|
System.out.println("shift - Expected: 1, 2, 3, 4, 5.");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(k);
|
||||||
|
System.out.println("");
|
||||||
|
|
||||||
|
k = shift(null, 5);
|
||||||
|
System.out.println("shift - Expected: Array empty");
|
||||||
|
System.out.print("Get: ");
|
||||||
|
MyArrayUtil.print(k);
|
||||||
|
System.out.println("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue