我在線上的代碼挑戰中得到了這個問題。我需要合併兩個排序的數組,其中一個大小M
與M
元素到另一個,M
元素和容量2M
。我提供了以下解決方案:如何將大小爲M的數組合併到另一個大小爲2M的數組中
class ArraysSorting {
/**
* Function to move elements at the end of array
*
* @param bigger array
*/
void moveToEnd(int bigger[]) {
int i = 0, j = bigger.length - 1;
for (i = bigger.length - 1; i >= 0; i--)
if (bigger[i] != 0) {
bigger[j] = bigger[i];
j--;
}
}
/**
* Merges array smaller array of size M into bigger array of size 2M
* @param bigger array
* @param smaller array
*/
void merge(int bigger[], int smaller[]) {
moveToEnd(bigger);
int i = smaller.length;
int j = 0;
int k = 0;
while (k < (bigger.length)) {
if ((i < (bigger.length) && bigger[i] <= smaller[j]) || (j == smaller.length)) {
bigger[k] = bigger[i];
k++;
i++;
} else {
bigger[k] = smaller[j];
k++;
j++;
}
}
}
}
有沒有更有效的方法來做到這一點?
的時間複雜度:O(2M)
是的,在Java中沒有無符號類型,你可以使用long而不是int :) –