面接問題の収集(18)(配列コピー)
//A、B、Bの2つの配列の要素がAの配列に含まれています.//Aの配列のBにない要素をCの配列に入れるコードを書いてください.//配列の中ですべて数字で、しかもすでに大きさによって並べ替えられている場合は、コードの最も速い効率を書いて//上の要素をC配列に置いてください.
/**
* The Class CopyArray.
*/
public class CopyArray {
/**
* The main method.
*
* @param args
* the arguments
*/
public static void main(String[] args) {
copyNoSort();
System.out.println("sort: ");
copySort();
}
/**
* Copy no sort.
*/
// m*n
public static void copyNoSort() {
int[] arrayA = new int[] { 11, 1, 2, 13, 4, 5, 6, 7, 8, 9 };
int[] arrayB = new int[] { 2, 4, 6, 8 };
int[] arrayC = new int[arrayA.length - arrayB.length];
int t = 0;
for (int i = 0; i < arrayA.length; i++) {
boolean isHave = true;
for (int k = 0; k < arrayB.length; k++) {
if (arrayA[i] == arrayB[k]) {
isHave = false;
}
}
if (isHave) {
arrayC[t] = arrayA[i];
t++;
}
}
for (int i = 0; i < arrayC.length; i++) {
System.out.print(arrayC[i] + ", ");
}
}
/**
* Copy sort.
*/
public static void copySort() {
int[] arrayA = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13 };
int[] arrayB = new int[] { 2, 4, 6, 8 };
int[] arrayC = new int[arrayA.length - arrayB.length];
int k = 0;
int t = 0;
for (int i = 0; i < arrayA.length; i++) {
if (k < arrayB.length) {
if (arrayA[i] < arrayB[k]) {
arrayC[t] = arrayA[i];
t++;
} else {
k++;
}
} else {
arrayC[t] = arrayA[i];
t++;
}
}
for (int i = 0; i < arrayC.length; i++) {
System.out.print(arrayC[i] + ", ");
}
}
}